2013-09-01 2 views
0

У меня есть этот класс:Activator.CreateInstance бросает исключение

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 и Mothod GetOne() оба находятся в одной и той же сборки CrudApp.BusinessLogic.dll

ответ

2

Вы passying type.Name в качестве параметра, но PlaceLogicEventListener имеет только неявный конструктор без параметров.

Try:

Type type = typeof (PlaceLogicEventListener); 
Activator.CreateInstance(type); 
3

Это может быть потому, что вам нужно полное имя типа.

попробовать: return (ILogicEventListener)Activator.CreateInstance(type.Assembly.Location, type.FullName);

Также проверьте эту тему: The type initializer for 'MyClass' threw an exception

2

Вы также переходящая в неправильном имени assembyly - это нужно имя дисплея. Итак:

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

Должен сделать это, а также отменить ObjectHandle, переданный обратно из CreateInstance.

Смежные вопросы