3 Stimmen

C# MEF kann keine Typbindung durchführen?

Ich möchte stattdessen eine Bindung nach Typ an das instanzierte Objekt vornehmen.

Was ich JETZT tun muss:

var catalog = new AssemblyCatalog(typeof(...).Assembly);

var container = new CompositionContainer(catalog); 
    var batch = new CompositionBatch(); 
var mySamurai = new Samurai(); 
batch.AddPart(mySamurai);//I would prefer the type not an object...    
    container.Compose(batch);
mySamurai.Attack();

Das funktioniert, ABER ich würde gerne etwas Ähnliches machen:

var catalog = new AssemblyCatalog(typeof(...).Assembly);
var container = new CompositionContainer(catalog);
var batch = new CompositionBatch();

batch.AddPart(typeof(Samurai));//HERE container.Compose(batch);        
var mySamurai = new Samurai();
mySamurai.Attack(); 

Ist das mit MEF möglich?

1voto

Daniel Plaisted Punkte 16486

Wenn ich Sie richtig verstehe, gibt es keine Möglichkeit, dies zu tun. MEF kann nichts tun, wenn es fakeEntity2 sieht, weil MEF es nie wirklich "sieht". Sie müssen es an den Container übergeben, wie Sie mit fakeEntity tun, oder Sie müssen die FakeEntity-Klasse zu exportieren, und ziehen Sie es aus dem Container irgendwie (dh mit GetExportedValue).

1voto

Wim Coenen Punkte 64891

Normalerweise richten Sie Exporte und Importe in MEF mit Attributen ein, anstatt sie im Code zu konfigurieren, wie es Ninject tut.

Auch wenn MEF die "Konfiguration im Code" nicht von Haus aus bietet, können Sie dennoch die MEFContrib Projekt zu tun, das mit dem Fabrik-Exportdienstleister .

Update : in MEF2-Vorschau3 attributlose Registrierung wurde hinzugefügt.

Auch, Mark Seemann bloggt über eine Möglichkeit, Typen auch ohne die neue attributlose Registrierung zu "registrieren", indem man Eigenschaftsexporte und Generika geschickt einsetzt.

0voto

neontapir Punkte 4600

Ich weiß nicht viel über MEF, aber Ihre Situation sieht aus wie etwas, das ein IoC-Container wie Ninject, Unity, StuctureMap, Castle Windsor, et al... auszeichnen würde.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X