创建泛型类实例引发TypeLoadException



My TestLayer类的命名空间为"BLL.Infrastructure.TestLayer",位于程序集内部:"BLL"

public class LayerFactory<T, U>
{
  public static IBaseLayer<T, U> Get()
  {
       var obj = Activator.CreateInstance("BLL", "BLL.Infrastructure.TestLayer", new object[]   { (IBaseLayer<T, U>)null });

  }
}

当我运行代码时,Activator抛出一个没有更多细节的TypeLoadException

这就是它应该创建的具体类:

GenericBaseLayer实现IBaseLayer。

public class TestLayer<T, U> : GenericBaseLayer<MyRequest, MyInfo.ActionType>
{
  public TestLayer(IBaseLayer<MyRequest, MyInfo.ActionType> layer)
            : base(layer)
   { }
}

我做错了什么?

LayerFactory位于装配内部:BLL

因此,程序集必须已加载!

更新

Type d1 = typeof(TestLayer<,>);
Type[] typeArgs = { typeof(T), typeof(U) };
Type constructed = d1.MakeGenericType(typeArgs);
var obj = Activator.CreateInstance(constructed, new object[] { (IBaseLayer<T, U>)null });

这是有效的:)

如这里所示指定类型名称字符串:该文章建议

"System.Collections.Generic.List`1[System.String]"

是CCD_ 1的字符串标识符。

如果您只在运行时知道TU,那么您仍然可以将Type.GetType与泛型类型定义的字符串表示一起使用:

Type d1 = Type.GetType(yourNamespace + ".TestLayer`2");

然后,您可以在d1上调用MakeGenericType,如问题所示。

相关内容

  • 没有找到相关文章

最新更新