02/02/15

Caricare dinamicamente una dll ed invocare un metodo con dei parametri


Tramite reflection possiamo caricare dinamicamente una dll ed eseguire un metodo specifico, passando anche dei parametri.
Le operazione che eseguiremo:
  • carichiamo la dll
  • cicliamo su tutte le classi presenti nella dll
  • Per ogni classe che implementa la nostra interfaccia (nel nostro caso di chiama IPluginable)
  • instanziamo la classe in questione (Activator.CreateInstance)
  • invochiamo il nostro metodo Initialize(InvokeMember)


      var assembly = Assembly.LoadFile(fileName);

            foreach (Type t in assembly.GetTypes())
            {
                if (t.IsClass == false)
                    continue;
                if (t.GetInterface("IPluginable") == null)
                    continue;

                _logger.InfoFormat("Creating instance of class {0}", t.FullName);
                object obj = Activator.CreateInstance(t);

                t.InvokeMember("Initialize", BindingFlags.Default | BindingFlags.InvokeMethod, null, obj,new object[]{_logger});
                t.InvokeMember("Run", BindingFlags.Default | BindingFlags.InvokeMethod, null, obj, null);
            }

 
Design by Free WordPress Themes | Bloggerized by Lasantha - Premium Blogger Themes | Grants For Single Moms