我有以下几点:

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/

10-12 23:57