实例化实现接口C#的泛型类型

时间:2014-09-19 07:19:25

标签: c# generics interface

我有以下通用类型:

public class CommandFlow<T> : IFlow where T: IFlow
{
    private T _flow;
    public CommandFlow(T flow)
    {
        _flow= flow;
    }    
}

其中IFlow有一些实现:StaticFlow,DynamicFlow,CombinedFlow。我想用Active.CreateInstance实例化泛型类型,所以我有代码:

var flowType = typeof(CommandFlow<>).MakeGenericType(nominalFlowType);
//nominalFlowType is one of the types: StaticFlow, DynamicFlow, CombinedFlow

然后我尝试实例化泛型类型:

var commandFlow = Activator.CreateInstance(flowType, new object[] {new StaticFlow()});

我收到错误:

  

“类型'构造函数'CommandFlow`1 [[DynamicFlow,...]]'找不到”

1 个答案:

答案 0 :(得分:2)

该错误表示您正在尝试构建CommandFlow<DynamicFlow>类型的对象,因此nominalFlowType必须为DynamicFlow

当您尝试传递StaticFlow作为构造函数参数时,没有任何构造函数可以执行此操作;您需要传递DynamicFlow值。