Структурная карта 2.6.1

#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<>));
                         });