Castle Windsor разрешение и дженерики

У меня есть следующее:

public interface ISubject { ... }

public class Subject<T> : ISubject { ... }

public class MyCode<T> {
    ...
    pulic void MyMethod()
    {
        var item = container.Resolve<ISubject>(); //????? how do I pass in T
    }
    ... 
 }

В этом случае, как мне решить.

Ура Энтони


person vdhant    schedule 16.05.2009    source источник


Ответы (1)


vdhant - Контейнеры не предназначены для использования.

Вы хотите использовать ISubject, верно? Затем, если вы передали T, вы нарушаете свою абстракцию, потому что ваш вызывающий абонент должен знать, что ISubject на самом деле является субъектом, и более того, это Subject<T> и что для него требуется конкретное T.

Ни один контейнер этого не позволит, но это проблема дизайна, а не инструмента.

Одна вещь, чтобы исправить ваш дизайн, это сделать его явным - изменить ISubject на ISubject<T>

Затем вы можете зарегистрировать открытый универсальный тип ISubject<> и привязать его к открытому универсальному типу Subject<>.

container.Register(Component.For(typeof(ISubject<>))
                            .ImplementedBy(typeof(Subject<>)));

Тогда вы сможете сделать

var fooSubject = container.Resolve<ISubject<Foo>>();

Вы не предоставили никакого контекста, поэтому я могу ошибаться с ответом, но одно можно сказать наверняка - у вас проблема с дизайном.

person Krzysztof Kozmic    schedule 16.05.2009
comment
Круто, так что я имею в виду, что мне нужно предоставить общую версию интерфейса, а затем я могу делать то, что хочу... звучит хорошо для меня. Ваше здоровье - person vdhant; 17.05.2009
comment
Рад помочь @EhsanSajjad - person Krzysztof Kozmic; 16.08.2015
comment
@KrzysztofKozmic, не могли бы вы помочь мне понять, как интегрировать wcf все сервисные контракты, или мне нужно добавлять все по одному, например IUserService , IAuthenticateService и т. д. ?? - person Ehsan Sajjad; 16.08.2015
comment
@EhsanSajjad попробуйте WithServiceAllInterfaces или, если вам нужно больше контроля, пользовательский предикат - person Krzysztof Kozmic; 16.08.2015
comment
мне нужно связать службы WCF в веб-приложении asp.net mvc, я исследовал, но не нашел подходящего примера, хотя нашел некоторые из них, которые были неполными - person Ehsan Sajjad; 16.08.2015
comment
@EhsanSajjad Возможно, создание конкретного вопроса поможет? Мы угоняем комментарии здесь. - person Krzysztof Kozmic; 17.08.2015
comment
@KrzysztofKozmic хорошо, конечно, я задам вопрос - person Ehsan Sajjad; 17.08.2015