微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – 温莎城堡解析和仿制品

我有以下内容
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,实际上是一个主题,而且不止于此,它的主题< T>并且它需要一个具体的T.

没有容器可以允许,但这是一个设计问题,而不是工具问题.

修复设计的一件事是将其设为显式 – 将ISubject更改为ISubject< T>

然后你可以注册开放的通用类型ISubject<>并将其绑定到打开泛型类型Subject<&gt ;.

container.Register(Component.For(typeof(ISubject<>))
                            .ImplementedBy(typeof(Subject<>)));

那你就能做到

var fooSubject = container.Resolve<ISubject<Foo>>();

你没有提供任何上下文,所以我可能没有答案,但有一件事是肯定的 – 你有一个设计问题.

原文地址:https://www.jb51.cc/csharp/244540.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐