2010-06-18 7 views
2

클래스 라이브러리에 몇 개의 클래스가 있습니다 (별도의 어셈블리). 내 프로젝트에 그것을 참조하고 해당 라이브러리에서 하나의 특정 클래스를 초기화하고 싶습니다. 나는 그 이름 만 알고있다. 모든 클래스는 하나의 인터페이스를 구현합니다. 그리고 여기에 문제가 있습니다. 지금까지라이브러리에서 하나의 클래스를 초기화하는 방법은 무엇입니까?

내 코드 :

using MyLibrary; 
... 
IMyInterface dll = Activator.CreateInstance("MyLibrary", "MyLibrary.NameOfClass") as IMyInterface; 

그러나 DLL은 항상 null입니다. 아이디어가 있으십니까?

감사

UPDATE는

나는 도서관에 대한 참조를 제거하고 해당 코드를 다시 작성 :

Assembly a = Assembly.Load("MyLibrary"); 
Type type = a.GetType("MyLibrary.SKClass"); 
IMyInterface obj = Activator.CreateInstance(type) as IMyInterface; 

하지만 OBJ null입니다.

a.GetExportedTypes()를 사용하여 라이브러리 유형을 검사하면 SKClass가 있습니다. 그렇다면이 코드는 여전히 null을 반환하는 이유는 무엇입니까?

+0

시도 부분은 "이 오류가 발생합니다 같은 캐스트가 누락되어 있는지 여부를 확인합니다.이 작동하고 –

+0

시도 "Activator.CreateInstance로 ("MyLibrary를 ","NameOfClass) ""로 ". – daemon

답변

2
var assembly = Assembly.LoadFile(@"full\path\to.dll"); 

var type = assembly.GetType("Full.Namespace.Type"); 

var object = Activator.CreateInstance(type); 
+0

감사"없이 – daemon

0

왜 사용하지 않습니까?

어셈블리 a = Assembly.Load ("ClassLibrary1"); Interface1 i = a.CreateInstance ("ClassLibrary1.ClassName")를 Interface1로 지정하십시오.

Activator ...를 사용해야 할 필요가 있습니까? 없이

관련 문제