c# - CaSTLe Windsor 解析和泛型

标签 c# .net inversion-of-control castle-windsor

我有以下内容:

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。

没有容器会允许这样做,但这是一个设计问题,而不是工具问题。

修复您的设计的一件事是使其明确 - 更改 ISubjectISubject<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/

相关文章:

dependency-injection - 基于标准的容器解析

c# - 仅扩展setter并使用getter c#的简写

c# - 调用 XmlWriter.WriteElementString 时防止字符转义

c# - 如何避免 Linq to Sql 查询中的循环?

c# - 确定枚举中缺少哪些标志

.net - 将 LINQ 与实现非泛型 ICollection 的类一起使用

.net - 如何最好地组装大量消息处理程序

c# - 组合根与服务定位器

c# - 我想将图像从数据库调用到结果中的 ASP :repeater control but I am getting <image src"System. Byte[]">

c# - Azure 函数的 API 速率限制