我遇到了将对象转换为实现的接口的问题,跨越不同的程序集,接口也使用泛型。
我有3个图书馆。 合同(接口位置) 实现(接口实现) MainAssembly(发生在ASP.NET MVC5应用程序中)
主要参考合同和实施。实现引用合同。
合同包含2个接口,一个使用另一个接口类型的通用
public interface IConfig{}
public interface IStore<TConfig> where TConfig : IConfig{}
实现包含2个实现这些接口的类。
public class ConfigBase : IConfig {}
public class Store<TConfig> :IStore<TConfig> where TConfig : ConfigBase {}
ASP.NET应用程序有一个继承自ConfigBase类的类
public class Configuration : ConfigBase {}
在合同库中,有一个服务类,其中包含一个需要一种IStore的方法
public void DoSomething(IStore<IConfig> store){}
然而,在一种商店中传递告诉我它无法转换它。这是发生编译时错误的地方,所有的东西都可以正确构建。
Store<Configuration> store = new Store<Configuration>();
serviceObj.DoSomething(store);
答案 0 :(得分:0)
使用out
通用修饰符
public interface IStore<out TConfig> where TConfig : IConfig{}.