Laden...

PlugIns mit LightCore entwickeln

Erstellt von bCoderer vor 13 Jahren Letzter Beitrag vor 13 Jahren 1.724 Views
B
bCoderer Themenstarter:in
101 Beiträge seit 2008
vor 13 Jahren
PlugIns mit LightCore entwickeln

Hallo Leute,

ich habe mich mal bzgl. IoC und DI schlau gemacht und bin auf Peter Buchers dll - LightCore gestoßen.
So weit alles super, nur möchte ich eine portable Anwendung plugin fähig machen. Da ich nun kein Fan bin die ganzen dll's in das bin Verzeichnis zu schmeißen wollte ich ffragen ob es irgendwie möglich ist mit LightCore Typen aus Assemblies aus bestimmten Ordner zu instanzieren?

Bei voll qualifiziereten Namen funktionierts leider nicht so wie ich will.

Würde mich über eine Antwort freuen,
beste Grüße
Norbert

PS: Hab schon überlegt eine eigene PlugIn Bibliothek zu schreiben oder MEF zu verwenden - nur habe ich mich schon zu LightCore bekannt 😉

1.044 Beiträge seit 2008
vor 13 Jahren

Hallo codeRaC#er,

der Ansatz ist eigentlich immer der Gleiche. Mach es am besten so wie in MEF. MEF löst mithilfe von Attributen die Abhängigkeiten auf. Das gleiche macht LightCore auch(ohne Attribute natürlich). Warum möchtest du es mit LightCore überhaupt machen, wenn MEF doch eh out of the box im .NET Framework 4 dabei ist? Und genau das ist auch das Ziel von MEF! IoC/DI vs MEF ist ein großes, wenn nicht schweres Thema. An deiner Stelle würde ich es mir wirlich gut überlegen. Catalogs und so andere tollen Sachen findest du in LightCore nicht.

zero_x

B
bCoderer Themenstarter:in
101 Beiträge seit 2008
vor 13 Jahren

Hi zero_x,

danke für deine Antwort.

Ich möchte auf keinen Fall in .NET 4.0 arbeiten (unterstützen noch zu wenie Clients). Am liebsten wäre mir eh 2.0 jedoch muss ich da zu viele Abstriche machen bzw. vieles selbst implementieren.

Ist die MEF auch unter 4.0 nutzbar?
Wahrscheinlich ist das eh die beste Lösung MEF zu verwenden. Das mit den Catalogs ist echt ne tolle Sache.

Naja, vielleicht hast noch eien Tipp,
Gruß

1.044 Beiträge seit 2008
vor 13 Jahren

Hallo codeRaC#er,

MEF ist bestandteil von .NET 4. Du kannst allerdings auch MEF in .NET 3.5 verwenden. MEF ist Open Source, du kannst es auf mef.codeplex.com herunterladen und auf .NET 3.5 kompilieren. In .NET 2 kannst du MEF nicht einfach so verwenden.

zero_x

B
bCoderer Themenstarter:in
101 Beiträge seit 2008
vor 13 Jahren

Hi zero_x,

danke nochmals.

Was ist davon zu halten wenn ich "intern" in meinem Programm mit LightCore (o.ä.) arbeite und alle PlugIns über MEF zur Verfügung stelle? Also quasi nur die Schnittstellen nach Außen über MEF abbilde?

Gruß Norbert

5.941 Beiträge seit 2005
vor 13 Jahren

Hallo zusammen

MEF und IoC- bzw. / DI-Komponenten darf man nicht gleichsetzen.
Man kann mit beidem alles machen, bzw. mit dem einen, das machen, für dass das andere konzipiert und spezialisiert ist.
Siehe:

Daher spricht auch nichts gegen eine Mischung.

Zu deiner Frage Norbert:
LightCore ist OpenSource, du kannst den Quellcode runterladen.
Die internet Methode, die den Typen "auflöst", arbeitet mit Type.LoadType(...),
diese geht standardmässig das bin-Verzeichnis durch.

Wenn du diesen Bereich ganz wenig anpasst, ggf. geht auch was in Richtung "Probing", solltest du dein Wunsch realisieren können.

Was auch häufig gestellt wird, ist die dynamische - zur Laufzeit - Registrierung.
Ich muss zugeben, das ist nicht dokumentiert, ist aber sehr simpel:

var builder = new ContainerBuilder();
builder.Register<IFoo, Foo>();

var container = builder.Build(); // erste Registrierung drin

// Irgendwo zur Laufzeit mit der selben Builder-Instanz.

builder.Register<IBar, Bar>();

container = builder.Build(); // erste und diese Registrierung drin

Gruss Peter

--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011

B
bCoderer Themenstarter:in
101 Beiträge seit 2008
vor 13 Jahren

Hallo Peter,

danke für deine ausführliche Antwort.

Denke ich werde es so machen wie in meinem vorigen Post beschrieben - intern LightCore verwenden und alles was nach aussen erweiterbar (Import, Export etc.) sein soll über MEF realisieren.

Besten Dank an alle, hab nun meine Bausteine zusammen - jetzt heißts basteln 😉

Gruß Norbert

PS: Ja, ich bin der Norbert 😉