将对象强制转换为已实现的接口

时间:2017-01-31 03:24:10

标签: c# generics interface casting

我遇到了将对象转换为实现的接口的问题,跨越不同的程序集,接口也使用泛型。

我有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);

1 个答案:

答案 0 :(得分:0)

使用out通用修饰符

为您设置通用界面协变
public interface IStore<out TConfig> where TConfig : IConfig{}.