我有以下内容:
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# - CaSTLe Windsor 解析和泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/872413/