Вопрос по castle-windsor, .net, inversion-of-control, ioc-container, c# – Замок Виндзор - регистрация IoC для открытых универсальных интерфейсов?

31

Разрешает ли Castle Windsor регистрировать открытый общий интерфейс или мне нужно регистрировать каждый возможный типизированный экземпляр отдельно?

Пример - приведенное ниже с типами T, Z завершится неудачно при компиляции, если я не укажу отдельно T, Z со строгими типами.

 container.Register(Component
      .For<IAdapterFactory<T,Z>>()
      .ImplementedBy<AdapterFactory<T,Z>>()
      .LifeStyle.PerWebRequest);
& quot; Сильные типы & quot; не точное описание, поскольку шаблоны используют сильные типы в C #. Моя точка зрения заключается в том, что Castle Windsor, похоже, не принимает шаблоны для регистрации, поэтому мне кажется, что мне нужно перечислить все возможные типы в ConstrollerInstaller.cs, чтобы зарегистрировать один и тот же IAdapterFactory для нескольких возможных типизированных вызовов. Кажется странным goldfinger
Вы не можете закрыть общий метод (например,Component.For<>) над незамкнутым универсальным типом. Так работают дженерики .NET. Посмотрите здесь для получения дополнительной информацииmsdn.microsoft.com/en-us/library/b8ytshk6.aspx Krzysztof Kozmic
Можете ли вы сказать больше об этом? «Это не ограничение Виндзора, а то, как работает среда выполнения .NET». goldfinger
это не ограничение Виндзора, а то, как работает среда выполнения .NET. Krzysztof Kozmic

Ваш Ответ

1   ответ
63

open genericи да, Виндзор поддерживает это.

 container.Register(Component
             .For(typeof(IAdapterFactory<,>))
             .ImplementedBy(typeof(AdapterFactory<,>))
             .LifestylePerWebRequest());
Это единственный синтаксис, который будет работать в этом сценарии, и он не имеет отношения к Виндзору. Это просто, как вы получаете экземплярSystem.Type представляющий открытый универсальный тип.
Одно слово: вау. Спасибо! Просто из любопытства удивляюсь, почему люди из Касла решили отклониться от более стандартного синтаксиса C # - & lt; T, Z & gt; вместо & lt;, & gt ;? goldfinger

Похожие вопросы