Verwenden Sie den IoC-Container für die Plugin-Architektur

8

Korrigiere mich, wenn ich falsch liege, aber MEF ist nur gut dafür geeignet, eine Menge unbekannter Dinge (Plugins) zu verwalten, die automatisch entdeckt und automatisch verkabelt werden können. Für ein zukünftiges Projekt benötigen wir einen echten IoC-Container, um die bekannten Teile der Anwendung explizit zu konfigurieren (was MEF nicht gut ist), aber zusätzlich müssen wir auch automatisch entdeckte Plugins unterstützen (vorzugsweise POCO ohne Attribute, falls das möglich ist). Kann ein IoC-Container dies einfach / standardmäßig unterstützen? Wenn ja, kannst du eine geben kurzer Hinweis, wie dies in Unity und StructureMap gemacht wird? Das sind die beiden, die wir derzeit bevorzugen. Wir möchten wirklich eine Abhängigkeit von einem IoC-Container und MEF vermeiden.

    
bitbonk 10.02.2011, 22:02
quelle

1 Antwort

8

Ich denke, es ist wichtig zu beachten, dass, während MEF nicht ein IoC-Container in einem herkömmlichen Sinne ist, es eine Inversion der Kontrolle durchführt. In der Tat würde ich dem widersprechen und sagen, MEF ist ein IoC-Container wie jeder andere auch. Der eigentliche Unterschied zwischen Unity und MEF besteht darin, dass MEF die Komposition standardmäßig über die explizite Typauflösung unterstützt und die Erkennung über die Konfiguration festlegt. Aber wie wir bereits beim MEFContrib -Projekt gesehen haben, ist es durchaus möglich, dass MEF sich mehr wie ein herkömmlicher IoC-Container verhält. MEF bietet Ihnen eine hervorragende Grundlage für das Verhalten modularer Komponenten, wobei Sie viel von dem harten Grafting herausnehmen, und die Art, wie es entworfen wurde, ermöglicht es Ihnen, mehr Funktionalität hinzuzufügen. Angenommen, Sie haben Ihre bestehende Codebasis um einen anderen IoC-Container oder Service-Locator herum aufgebaut. Sie könnten dazu einen ExportProvider verkabeln, aber Sie könnten einen Provider an einen Service-Locator wie den Common Service Locator projizieren und schließen Sie dann eine kompatible CSL-Implementierung an und verfügen über MEF-Komponententeile, die Typen verwenden, die von Ihrem anderen IoC-Container abgeleitet sind. MEF führt auch eine Abhängigkeitsinjektion für Sie durch.

Wenn Sie vermeiden möchten, dass eine Abhängigkeit von einem bestimmten IoC-Container oder MEF selbst besteht, könnten Sie immer etwas wie den Common Service Locator verwenden, der eine Abstraktion über allgemeine Containeroperationen darstellt. Auf diese Weise ist es relativ schmerzlos, wenn Sie ändern möchten, wie alles zusammengelötet ist. Es gibt kompatible CSL-Implementierungen für die meisten IoC-Container und MEF.

Ich hoffe, das hilft.

    
Matthew Abbott 10.02.2011 22:15
quelle

Tags und Links