0

我的 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 });

这有效:)

4

1 回答 1

0

按此处所示指定类型名称字符串:该文章建议

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

是 a 的字符串标识符List<string>

如果您知道T并且U仅在运行时,您仍然可以使用Type.GetType泛型类型定义的字符串表示:

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

MakeGenericType然后,您可以d1按照问题所示进行呼叫。

于 2012-09-02T22:32:28.377 回答