#c# #generics #structuremap
#c# #обобщения #structuremap
Вопрос:
В моем текущем проекте я в настоящее время пытаюсь заменить Windsor IoC в пользу structure map (2.6.1). Но возникла небольшая проблема с регистрацией некоторых универсальных типов. Как бы мне зарегистрироваться, IFilterConverter<T>
чтобы использовать FilterConverter<SomeSpecificType>
. Я пробовал ConnectImplementationsToTypesClosing(IFilterConverter), но из того, что я прочитал (статья Джимми Богарда) Для этого мне нужен конкретный тип, определенный следующим образом:- SomeConcreteType : IFilterConverter<SomeSpecificType>
а у меня его нет.
Итак, чтобы повторить, если у меня есть тип, который принимает аргумент конструктора IFilterConverter<SomeSpecificType>
, я хочу, чтобы структурная карта предоставила мне FilterConverter<SomeSpecificType>
.
В Windsor я использовал опцию XML config (от которой я хочу отказаться) Но все, что я сделал, это просто настроил конфигурацию следующим образом:
<component id="IFilterConverter" service="SomeNamespace.IFilterConverter`1, SomeNamespace" type="SomeNamespace.FilterConverter`1, SomeNamespace" lifestyle="PerWebRequest">
Как мне сделать эквивалент в SM (используя код, а не файлы конфигурации XML)
Спасибо
Комментарии:
1. Из любопытства — почему вы переходите с Windsor на StructureMap?
2. Никакой серьезной причины, просто я много слышал и читал о структурной карте и хотел попробовать. Как я уже говорил в своей статье, я использовал опцию config file с Windsor и не особо заботился об этом. Я понимаю, что мог бы просто переключиться на настройку Windsor с помощью c #-кода, но подумал, что попробую SM. Я никоим образом не предполагаю, что SM каким-либо образом «лучше», чем Windsor. Это было просто любопытство.
Ответ №1:
Я думаю, это должно сработать.
_container = new Container();
_container.Configure(x =>
{
x.For(typeof (IFilterConverter<>)).Use(typeof (FilterConverter<>));
});