J'essaie de créer un archétype de type plug-in pour mon projet. Je voudrais pouvoir charger un assemblage, obtenir un type dérivé d'une classe de base abstraite dans mon projet, l'instancier et charger ce type dérivé dans l'objet de traitement principal.Réflexion - Impossible de créer une nouvelle instance d'objet C#
Mon problème maintenant est que lorsque j'instancie l'objet de l'ensemble reflété, il est toujours nul. Je pense que le problème peut résider dans le fait que l'assembly référencé possède des DLL tierces qu'il utilise. Voici le code: la seule exception qui est touchée est la dernière.
static void Main(string[] args)
{
string engineFilePath = ConfigurationManager.AppSettings["EngineFilesDirectory"]
+ "\\" + ConfigurationManager.AppSettings["EngineDllFileName"];
Assembly asm = Assembly.LoadFile(engineFilePath);
Type engineType = asm.GetType(ConfigurationManager.AppSettings["EngineType"]);
if (!engineType.IsSubclassOf(typeof(EngineConcrete)))
{
throw new ArgumentException("Engine is not derived from base implimentation.");
}
object engineInstance = asm.CreateInstance(engineType.Namespace + "." + engineType);
if (engineInstance == null)
{
//always thrown at this point
throw new Exception(string.Format("Engine object is null."));
}
return;
}
Si je change la ligne de instanciation à Activator.CreateInstance(engineType)
, je reçois une erreur disant que l'un des l'être dll 3ème partie référencée par l'assemblée réfléchie ne peut pas être trouvé, mais ils sont dans le même répertoire que le. dll étant réfléchi.
Il existe également un constructeur public pour le type reflété. Il n'a aucun paramètre et hérite de la classe EngineConcrete
.
Résolu la dernière pièce. Je vous remercie –