C# 创建泛型类实例引发TypeLoadException

C# 创建泛型类实例引发TypeLoadException,c#,generics,reflection,C#,Generics,Reflection,我的TestLayer类具有名称空间:“BLL.Infrastructure.TestLayer”,并且位于程序集中:“BLL” 公共类LayerFactory { 公共静态IBaseLayer Get() { var obj=Activator.CreateInstance(“BLL”,“BLL.Infrastructure.TestLayer”,新对象[]{(IBaseLayer)null}); } } 当我运行代码时,激活器抛出一个TypeLoadException,没有更多细节 这是它

我的TestLayer类具有名称空间:“BLL.Infrastructure.TestLayer”,并且位于程序集中:“BLL”

公共类LayerFactory
{
公共静态IBaseLayer Get()
{
var obj=Activator.CreateInstance(“BLL”,“BLL.Infrastructure.TestLayer”,新对象[]{(IBaseLayer)null});
}
}
当我运行代码时,激活器抛出一个TypeLoadException,没有更多细节

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

GenericBaseLayer实现IBaseLayer

public class TestLayer<T, U> : GenericBaseLayer<MyRequest, MyInfo.ActionType>
{
  public TestLayer(IBaseLayer<MyRequest, MyInfo.ActionType> layer)
            : base(layer)
   { }
}
public类测试层:GenericBaseLayer
{
公共测试层(IBaseLayer层)
:基层(层)
{ }
}
我错了什么

LayerFactory位于程序集内: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 });


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

更新

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 });
Type d1=typeof(测试层);
类型[]typeArgs={typeof(T),typeof(U)};
构造的类型=d1.MakeGenericType(typeArgs);
var obj=Activator.CreateInstance(构造,新对象[]{(IBaseLayer)null});

这是有效的:)

指定文章建议的类型名称字符串

"System.Collections.Generic.List`1[System.String]"
列表的字符串标识符

如果仅在运行时才知道
T
U
,则仍然可以将
Type.GetType
与泛型类型定义的字符串表示形式一起使用:

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

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

异常在InnerException属性中有更多详细信息。GenericBaseLayer的静态ctor已抛出。没有更多,InnerException为NULLOk,然后按ctrl-alt-e并使调试器在所有异常发生时正确中断(可能是快捷方式出错)。这有什么帮助?(我尝试过这个技巧)我总是在TypeLoadException处中断,因为无法加载testlayer…TestLayout类需要两个通用参数,对吗?我似乎没有将它们传递给您正在调用的
CreateInstance
方法。事实上,当您将实际类型
MyRequest
MyInfo.ActionType
传递给基类的相应类型参数时,似乎根本没有使用这些泛型参数(
TestLayout
代码中)。英雄联盟就在你发布之前。。。字符串参数中的“`2”是什么?@Elisa:Yes;起初,我试图解释这一点,但不知何故,SO标记不允许我这样做(因为`和开头尖括号是这里的特殊字符)。