Próbuję załadować niektóre pliki .dll dynamicznie. Pliki to wtyczki (na razie napisane samodzielnie), które mają co najmniej jedną klasę, która implementuje MyInterface
. Dla każdego pliku wykonuję następujące czynności:C# rzucić klasę na listę interfejsów
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);
}
}
}
Uruchomienie tego powoduje wyjątek odlewania, ale nie można znaleźć obejścia. W każdym razie zastanawiam się, dlaczego to w ogóle nie działa. Szukam rozwiązania w .NET Framework 3.5.
Inną rzeczą, która się do mnie trafiało null
w p
po uruchomieniu następujące w punkcie przed dodaniem nowego wpisu do _myList
w powyższym kodzie:
var p = type.InvokeMember(null, BindingFlags.CreateInstance, null,
null, null) as MyInterface;
Ten kod został pierwszą próbę na ładowanie wtyczek, nie dowiedziałem się jeszcze, dlaczego p
był już null
. Mam nadzieję, że ktoś może mnie poprowadzić we właściwy sposób :)
ten kod nie działa, co to jest X i gdzie go zainicjować? – devundef
W powyższym fragmencie kodu jest "x" w "if (x! = Null)" naprawdę powinno być "myI"? –
Powinieneś również sprawdzić, czy typ ma domyślny konstruktor, ponieważ twój kod to zakłada. –