C# 创建泛型类实例引发TypeLoadException
我的TestLayer类具有名称空间:“BLL.Infrastructure.TestLayer”,并且位于程序集中:“BLL”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,没有更多细节 这是它
公共类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标记不允许我这样做(因为`和开头尖括号是这里的特殊字符)。