2016-03-19 23 views
1

Ich versuche, das Factory-Muster mit MEF zu implementieren. was ich tue, ist Schnittstelle der Produktklasse und machen die konkreten Klassen mit Metadaten exportiert, die in jeder der konkreten Klassen unterschiedlich ist.MEF Factory Pattern mit einem parametrisierten Konstruktor

[ImportMany("Product")] 
public List<Lazy<IProduct, IProductMetaData>> ProductTypes; 

dann in der Funktion erstellen i-Filter, der zuvor erwähnte Liste der Produkttypen, die eine Implementierung zurück gegeben: zusammen mit ihren zugehörigen Metadaten, wie folgt in der Factory-Klasse i eine Liste von Faul habe Schnittstelle von Produkten geladen als Parameter für die create-Funktion:

public IProduct CreateProduct(string type) 
     { 
      var productType = ProductTypes.FirstOrDefault(x => x.Metadata.Type == type); 
      return productType .Value; 
     } 

Bis zu diesem Punkt funktioniert alles gut. Was aber, wenn jede der konkreten Produktklassen, die von der Factory-Klasse zurückgegeben werden sollen, einen Parameter in ihrem Konstruktor hat?

Antwort

0

Solange die Product Klassen haben eine ImportingConstructor die genannte Konstruktor Dekoration, MEF kümmert diese Importe zu befriedigen, wenn die Klasse tatsächlich instanziiert wird (wenn Sie das faule Objekt Value Eigenschaft zugreifen), so dass Sie nichts zu befürchten .