【发布时间】:2012-09-03 06:32:28
【问题描述】:
我的 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 });
这行得通:)
【问题讨论】:
-
异常在 InnerException 属性中有更多详细信息。 GenericBaseLayer 的静态 ctor 抛出。
-
没有更多,InnerException为NULL
-
好的,然后按 ctrl-alt-e 并让调试器在所有异常发生时立即中断(可能是快捷方式错误)。
-
这有什么帮助? (oc 我试过这个技巧)我总是在 TypeLoadException 中断,因为无法加载测试层......
-
TestLayout类需要两个通用参数,对吧?我似乎没有将它们传递给您正在调用的CreateInstance方法。实际上,您似乎根本没有使用那些通用参数(TestLayout代码中的<T, U>),因为您将实际类型MyRequest和MyInfo.ActionType传递给基的相应类型参数类。
标签: c# generics reflection