我有以下内容:
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<T>
并且它需要一个具体的 T。
没有容器允许这样做,但这是一个设计问题,而不是工具问题。
修复你的设计的一件事就是让它变得明确——改变ISubject
to ISubject<T>
然后你可以注册开放泛型类型ISubject<>
并将其绑定到开放泛型类型Subject<>
.
container.Register(Component.For(typeof(ISubject<>))
.ImplementedBy(typeof(Subject<>)));
然后你就可以做
var fooSubject = container.Resolve<ISubject<Foo>>();
您没有提供任何上下文,因此我的答案可能偏离了轨道,但有一件事是肯定的 - 您遇到了设计问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)