2010-08-05 13 views
1

J'écris une petite architecture de plugin et j'ai décidé d'utiliser MEF On m'a dit que nous devions utiliser un fichier de configuration.Simple Plugin avec MEF .Comment puis-je charger le plugin en utilisant un fichier de configuration

Y at-il un exemple là-bas qui utilise Mef et un fichier de configuration?

Tout ce dont j'ai besoin c'est comment configurer mef dans un fichier de configuration est-ce possible? Ceci est un petit exemple noddy je l'ai construit pour tester je manque la fonction LoadPlugin et le fichier config Pouvez-vous aider

Noddy exemple

     //MyCompany.Payment.Contracts.dll 

     public interface IPayment 
     { 
      bool Pay(); 
     } 
     //MyCompany.Payment.ServiceProviderOne.dll 
      [Export(typeof(IPayment))] 
     public class ServiceProviderOne:IPayment 
     { 
      public bool Pay(return true); 
     } 
     //MyCompany.Payment.ServiceProviderTwo.dll 
      [Export(typeof(IPayment))] 
     public class ServiceProviderTwo:IPayment 
     { 
      ?public bool Pay(return true); 
     } 

     //Main Console.Applicaiton 
     class Program 
      { 
       static void Main(string[] args) 
       { 
        HelperPlugin helperPlugin =new HelperPlugin(); 
        List<IPayment> myLoadedPayments= helperPlugin.GetPlugins(); 

        //blahhh conti 
       } 
      } 

      public cass HelperPlugin 
      { 
       [ImportMany(typeof(IPayment))] 
       public List<IPayment>Payments { get; set; } 

       public List<IPayment>GetPlugins() 
       { 
        Payments=new List<IPayment>(); 
        LoadPlugins(); 

        return Payments; 
       } 

       private void LoadPlugins() 
       { 
       ??? 
       } 
      } 

du fichier de configuration Qu'est-ce que ça ressemble?

Merci pour toutes suggestions ou des extraits de code

Répondre

1

Je travaille sur un problème similaire en ce moment et mon approche est la suivante:

  • Je prévois d'avoir un fichier de configuration qui définit la façon dont mon CompositionContainer sera configuré
  • ma config doit contenir une liste de répertoires pour le conteneur à analyser (en utilisant un DirectoryCatalog pour chaque répertoire spécifié)
  • et ma config devrait également prendre en charge une liste de assemb mensonges qui peuvent être stockées ailleurs, et qui serait inclus en ayant plusieurs AssemblyCatalog utilisés à cette fin

Donc, fondamentalement, je suis en train de configurer les catalogues qui composent mon AggregateCatalog que le récipient de composition utilisera pour trouver les pièces. Pas encore là, malheureusement - donc c'est juste dans ma tête pour le moment - pas encore de code.

1

Ce que j'ai fait dans un projet récent était d'inclure une propriété Name dans l'interface. Toutes les extensions que je voulais être accessibles ont été chargées, puis un paramètre de fichier de configuration a listé celles par nom que je voulais utiliser. J'ai utilisé une boucle pour inspecter les extensions qui étaient chargées et, si elles étaient nommées dans le paramètre, je les ai ajoutées à une liste interne.

Mon exigence était d'avoir une commande spécifique que les extensions ont été utilisées, donc cette solution a fonctionné pour moi.

J'aurais pu inclure des métadonnées dans les assemblages pour accomplir la même chose, mais je voulais que l'information soit plus visible et fasse partie du contrat.