我有以下几点:
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
}
...
}
在这种情况下,我该如何解决。
干杯
安东尼
最佳答案
vdhant-这不是容器的使用方式。
您想使用ISubject
吗?然后,如果您通过了T,那么您将破坏抽象,因为调用者必须知道ISubject
实际上是一个Subject,并且更重要的是,它是Subject<T>
并且它需要一个具体的T。
没有容器会允许这样做,但这是设计问题,而不是工具问题。
修复您的设计的一件事是使其明确-将ISubject
更改为ISubject<T>
然后,您可以注册开放通用类型ISubject<>
并将其绑定(bind)到开放通用类型Subject<>
。
container.Register(Component.For(typeof(ISubject<>))
.ImplementedBy(typeof(Subject<>)));
那你就可以做
var fooSubject = container.Resolve<ISubject<Foo>>();
您没有提供任何上下文,所以我可能无法给出答案,但是可以肯定的是-您遇到了设计问题。
关于c# - 温莎城堡解析和泛型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/872413/