Estoy intentando cargar algunos archivos .dll dinámicamente. Los archivos son complementos (auto-escritos por el momento) que tienen al menos una clase que implementa MyInterface
. Para cada archivo que estoy haciendo lo siguiente:C# lanzar una clase a una lista de interfaz
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);
}
}
}
La ejecución de esta causa una excepción de difusión, pero no puedo encontrar una solución. De todos modos, me pregunto por qué esto no funciona en absoluto. Estoy buscando una solución en .NET Framework 3.5.
Otra cosa que me ha pasado estaba null
en p
después de ejecutar lo siguiente en el punto antes de añadir una nueva entrada a _myList
en el código anterior:
var p = type.InvokeMember(null, BindingFlags.CreateInstance, null,
null, null) as MyInterface;
Este código fue el primer intento de cargar el Complementos, no encontré por qué p
era null
todavía. Espero que alguien me pueda guiar de la manera correcta :)
este código no funciona, ¿qué es x y dónde lo inicias? – devundef
En el fragmento de código anterior, ¿se supone que "x" en "if (x! = Null)" es "myI"? –
También debe verificar que el tipo tenga un constructor predeterminado, ya que su código asume eso. –