Næste kig på Managed Extensibility Framework

Næste kig på Managed Extensibility Framework

  • Comments 1

Jeg kigger her på hvordan man bruger ImportingConstructor og loader assemblies dynamisk med MEF. Jeg bygger videre på eksemplet fra min første blogpost om MEF.

Når man begynder at arbejde lidt videre med MEF, så kommer man hurtigt ud i, at man har mange imports og eksports. Brug af ImportingConstructor gør livet lidt nemmere, og koden lidt mere læselig, da du kan reducere dine import attributter. Gennem ImportingConstructor så får du initialiseret alle dine variable (Imports) via konstruktøren. 

[Export(typeof(IProducer))]
public class SuperProducer : IProducer
{
    public string str{ get; set; }
    [ImportingConstructor]
    public SuperProducer([Import("MyInput")]string i) {
        this.str = i;
    }
    public string Produce()
    {
        return "Hello Universe "+ str;
    }
}

Det betyder at når konstruktøren eksekveres, så kræver det, at der er en export der matcher importen i constructoren ([Import("MyInput")]. 

[Export("MyInput")]
string input = "Input to SuperProducer";

Måske endnu mere interessant bliver det, når man begynder at kigge på hvordan parts (imports og exports) kan loades dynamisk. I det følgende instantierer jeg et AggregateCatalog som er et catalog der selvsagt aggregerer catalogs. I dette tilfælde bruger jeg AssemblyCatalog og DirectoryCatalog. DirectoryCatalog er interessant, da det læser alle assemblies i folderen som den får som parameter. Herefter bruger containeren, der matcher imports og exports i den dynamiske komponering, alle de import og exports der findes i assemblien.

var catalog = new AggregateCatalog(new ComposablePartCatalog[] { 
              new AssemblyCatalog(System.Reflection.Assembly.GetExecutingAssembly()),
              new DirectoryCatalog("Plug-ins")
            });
var container = new CompositionContainer(catalog);
var batch = new CompositionBatch();
batch.AddPart(this);
container.Compose(batch);

Jeg syntes MEF ser rigtig lovende ud. Mit fulde eksempel kan downloades her.

Page 1 of 1 (1 items)