我的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在Assembly中: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 });
这有效:)
答案 0 :(得分:0)
指定类型名称字符串,如图所示here:该文章建议
"System.Collections.Generic.List`1[System.String]"
是List<string>
的字符串标识符。
如果仅在运行时知道T
和U
,您仍然可以将Type.GetType
与泛型类型定义的字符串表示形式一起使用:
Type d1 = Type.GetType(yourNamespace + ".TestLayer`2");
然后,您可以在MakeGenericType
上致电d1
,如问题所示。