vdh*_*ant 6 .net c# castle-windsor inversion-of-control
我有以下内容:
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
}
...
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我该如何解决.
干杯安东尼
Krz*_*mic 12
vdhant - 这不是容器的使用方式.
你想用ISubject,对吗?然后,如果你通过了T,你就会破坏你的抽象,因为你的调用者必须知道ISubject,实际上是一个主题,而不是那个,它是a Subject<T>,它需要一个具体的T.
没有容器可以允许,但这是一个设计问题,而不是工具问题.
修复你的设计的一件事是将其明确化 - ISubject改为ISubject<T>
然后,您可以注册打开泛型类型ISubject<>并将其绑定到打开泛型类型Subject<>.
container.Register(Component.For(typeof(ISubject<>))
.ImplementedBy(typeof(Subject<>)));
Run Code Online (Sandbox Code Playgroud)
那你就能做到
var fooSubject = container.Resolve<ISubject<Foo>>();
Run Code Online (Sandbox Code Playgroud)
你没有提供任何上下文,所以我可能没有答案,但有一件事是肯定的 - 你有一个设计问题.
| 归档时间: |
|
| 查看次数: |
7014 次 |
| 最近记录: |