Comment bien mouler des objets créés par réflexion

Je suis d'essayer d'envelopper ma tête autour de la réflexion, j'ai donc décidé d'ajouter un plugin capacité d'un programme que je suis en train d'écrire. La seule façon de comprendre un concept est d'obtenir vos doigts sales et écrire le code, je suis donc allé à la route de la création d'une interface simple bibliothèque composée de la IPlugin et IHost interfaces, un plugin de mise en œuvre de la bibliothèque de classes qui implémentent IPlugin, et une simple console de projet qui instancie le IHost mise en œuvre de la classe qui n'simple de travailler avec le plugin objets.

L'aide de la réflexion, j'ai voulu faire une itération sur les types de contenus à l'intérieur de mon plugin de mise en œuvre de la dll et de créer des instances de types. J'ai été en mesure de réussi à instancier des classes avec ce code, mais je ne pouvais pas jeté l'objet créé à l'interface.

J'ai essayé ce code mais je ne pouvais pas le cast de l'objet o comme je m'y attendais. J'ai marché à travers le processus avec le débogueur et le bon constructeur est appelé. Quickwatching objet o m'a montré qu'il avait les champs et les propriétés que je m'attendais à voir dans la mise en œuvre de la classe.

loop through assemblies
  loop through types in assembly
    //Filter out unwanted types
    if (!type.IsClass || type.IsNotPublic || type.IsAbstract )
      continue;
    //This successfully created the right object
    object o = Activator.CreateInstance(type);
    //This threw an Invalid Cast Exception or returned null for an "as" cast
    //even though the object implemented IPlugin      
    IPlugin i = (IPlugin) o;

J'ai fait le code du travail.

using System.Runtime.Remoting;
ObjectHandle oh = Activator.CreateInstance(assembly.FullName, type.FullName);
//This worked as I intended
IPlugin i = (IPlugin) oh.Unwrap();
i.DoStuff();

Voici mes questions:

  1. Activateur.CreateInstance(Type t) retourne un objet, mais je n'arrivais pas à convertir l'objet à une interface de l'objet mis en œuvre. Pourquoi?
  2. Si j'ai été en utilisant un autre surcharge de la méthode CreateInstance()?
  3. Ce sont la réflexion en matière de conseils et d'astuces?
  4. Est-il un élément crucial de la réflexion que je suis tout simplement pas l'obtenir?

source d'informationauteur Ben Robbins