일부 .dll 파일을 동적으로로드하려고합니다. 파일은 MyInterface
을 구현하는 클래스가 하나 이상있는 플러그인 (현재는 자체 작성)입니다.C# 인터페이스 목록에 클래스 캐스팅
Dictionary<MyInterface, bool> _myList;
// ...code
Assembly assembly = Assembly.LoadFrom(currentFile.FullName);
foreach (Type type in assembly.GetTypes())
{
var myI = type.GetInterface("MyInterface");
if(myI != null)
{
if ((myI.Name == "MyInterface") && !type.IsAbstract)
{
var p = Activator.CreateInstance(type);
_myList.Add((MyInterface)p, true);
}
}
}
이이 캐스트 예외가 발생합니다 실행,하지만 난 해결 방법을 찾을 수 없습니다 : 각 파일에 대해 나는 다음과 같은 일을 해요. 어쨌든 이것이 왜 전혀 작동하지 않는지 궁금합니다. .NET Framework 3.5 솔루션을 찾고 있어요.
내게 일어난 또 다른 것은 위의 코드에서_myList
에 새 항목을 추가하기 전에 지점에서 다음을 실행 한 후
p
에
null
을 얻고 있었다
다음로드의 첫 번째 시도를
var p = type.InvokeMember(null, BindingFlags.CreateInstance, null,
null, null) as MyInterface;
이 코드가되었다 플러그인, 난 p
null
아직 이유를 찾지 못했습니다. 누군가 나를 올바른 방향으로 이끌 수 있기를 바랍니다 :)
이 코드는 작동하지 않습니다. x는 무엇이며 어디에 초기화합니까? – devundef
위의 코드 조각에서 "if (x! = null)"의 "x"는 실제로 "myI"가됩니까? –
코드에서 가정하기 때문에 유형에 기본 생성자가 있는지 확인해야합니다. –