unity能否实现下面方式的注入?
ISample和ISample2均为接口,Sample和Sample2均为实现了ISample和ISample2接口的类,
注册的时候是:
container.RegisterType<ISample<ISample2>, Sample<Sample2>>();
我想使用下面的方式获取到Sample<Sample2>的实例,
var re = container.Resolve<ISample<ISample2>>();
不知道unity能否实现,或者哪个ioc工具可以实现呢?
如果定义:
public class Sample<Sample2> : ISample<ISample2>;
是可以的。
恩,这个可以,但是 不想增加这么一个类型,因为目前要增加的话,会有很多这种冗余的类型的,有没有其它的方式呢?谢谢了
@小蔡: 你这个问题不是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: 我明白了,谢谢