首页 新闻 搜索 专区 学院

IOC容器的泛型注入问题

0
悬赏园豆:20 [已解决问题] 解决于 2012-09-13 11:16

unity能否实现下面方式的注入?

ISample和ISample2均为接口,Sample和Sample2均为实现了ISample和ISample2接口的类,

注册的时候是:

container.RegisterType<ISample<ISample2>, Sample<Sample2>>();

我想使用下面的方式获取到Sample<Sample2>的实例,

var re = container.Resolve<ISample<ISample2>>();

不知道unity能否实现,或者哪个ioc工具可以实现呢?

小蔡的主页 小蔡 | 菜鸟二级 | 园豆:214
提问于:2012-09-13 10:35
< >
分享
最佳答案
0

如果定义:

public class Sample<Sample2> : ISample<ISample2>;

是可以的。

收获园豆:20
Launcher | 高人七级 |园豆:45045 | 2012-09-13 10:41

恩,这个可以,但是 不想增加这么一个类型,因为目前要增加的话,会有很多这种冗余的类型的,有没有其它的方式呢?谢谢了

小蔡 | 园豆:214 (菜鸟二级) | 2012-09-13 10:44

@小蔡: 你这个问题不是IOC的问题,而是逆变、协变的问题,请阅读下面的代码:

public interface ISample<out T>{}  // 把这里的 out 关键字去掉,再查看结果。
public class Sample<T> : ISample<T>{}
public interface ISample2 {}
public class Sample2 : ISample2{}

 

// 下面的代码可以在你使用IOC之前先验证是否存在可用类型转换,这是IOC的基础。

Sample<Sample2> sample = new Sample<Sample2>();
ISample<ISample2> obj = sample;

// 下面为 IOC 注册。

container.RegisterType<ISample<ISample2>, Sample<Sample2>>();

Launcher | 园豆:45045 (高人七级) | 2012-09-13 10:57

@Launcher: 我明白了,谢谢

小蔡 | 园豆:214 (菜鸟二级) | 2012-09-13 11:16
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册