0

我有这堂课:

public class PlaceLogicEventListener : ILogicEventListener
{

}

我有这段代码试图通过反射创建一个实例:

public ILogicEventListener GetOne(){
    Type type = typeof (PlaceLogicEventListener);
    return  (ILogicEventListener)Activator.CreateInstance(type.Assembly.Location, type.Name);
}

我收到以下异常:

System.TypeInitializationException : The type initializer for 'CrudApp.Tests.Database.DatabaseTestHelper' threw an exception.
  ----> System.IO.FileLoadException : Could not load file or assembly 'C:\\Users\\xxx\\AppData\\Local\\Temp\\vd2nxkle.z0h\\CrudApp.Tests\\assembly\\dl3\\5a08214b\\fe3c0188_57a7ce01\\CrudApp.BusinessLogic.dll' or one of its dependencies. The given assembly name or codebase was invalid. (Exception from HRESULT: 0x80131047)

GetOne()从测试 dll 中调用。的代码PlaceLogicEventListener和方法GetOne()都在同一个程序集中CrudApp.BusinessLogic.dll

4

3 回答 3

3

这可能是因为您需要类型的全名。

尝试:return (ILogicEventListener)Activator.CreateInstance(type.Assembly.Location, type.FullName);

还要检查这个线程:'MyClass' 的类型初始化程序引发了异常

于 2013-09-01T21:24:02.437 回答
2

type.Name作为参数传递,但PlaceLogicEventListener只有一个隐式无参数构造函数。

尝试:

Type type = typeof (PlaceLogicEventListener);
Activator.CreateInstance(type);
于 2013-09-01T21:24:46.263 回答
2

您还传递了错误的程序集名称 - 它需要显示名称。所以 :

        Type type = typeof(PlaceLogicEventListener);
        var foo = (ILogicEventListener)Activator.CreateInstance(type.Assembly.FullName, type.FullName).Unwrap();

应该这样做并解开从 CreateInstance 传回的 ObjectHandle。

于 2013-09-01T21:44:23.290 回答