У меня есть следующее:
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
}
...
}
В этом случае, как мне решить.
Ура Энтони
Ответ 1 · рейтинг 13 · Krzysztof Kozmic
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>>();
Вы не предоставили никакого контекста, поэтому я могу ошибаться с ответом, но одно можно сказать наверняка - у вас проблема с дизайном.