Laden...

Dependency Inection via XML mit unbekannten DLLs

Erstellt von hannes123 vor 10 Jahren Letzter Beitrag vor 10 Jahren 1.172 Views
H
hannes123 Themenstarter:in
2 Beiträge seit 2013
vor 10 Jahren
Dependency Inection via XML mit unbekannten DLLs

Hallo Zusammen,

ich suche eine DI Framework bzw. Container, habe aber einen speziellen Anwendungsfall:

Die Anwendung bzw. Haupt-GUI beinhaltet mehrere Module in Tabs, diese Module/Tabs sind aber in anderen Visual Studio Projekten und jetzt kommts - die GUI hat keine Reference auf die Module.
Die Anwendung sollte über keine XML-Datei konfiguriert werden, also welche Module/Dlls geladen und initiiert werden, auch müsste hier abhängig von den Modulen die jeweilige spezielle Konfiguration über Konstruktor Injektion möglich sein.

Wer also kennt einen DI Container, der Instanzen aus "unbekannten" Dlls erzeugt?

Vielen Dank und Gruß!

5.941 Beiträge seit 2005
vor 10 Jahren

Hallo hannes123

Irgendwo und irgendwie musst du eine Konfiguration hinterlegen. Wenn nicht per XML, dann in einem anderen Dateiformat.

Du könntest aber, fallst du das selber entwickeln kannst, ein Modul schreiben, dass eine Art "Probing" machen würde.

Also ein Suchen deiner DLLs bzw. der Typen darin in vorbestimmten Pfaden.

Mit LightCore ist das über eine eigene Implementierung eines "RegistrationModule" möglich.
Siehe:

Gruss Peter

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

H
hannes123 Themenstarter:in
2 Beiträge seit 2013
vor 10 Jahren

Erst mal vielen Dank! 👍

Ich hätt's halt am liebsten über einen DI Container gemacht, aber leider keinen gefunden der dies on the fly unterstützt. Außer für Prism gibts anscheinend eine Möglichkeit über Module, aber ich verwende das MVVM LightToolkit.
Zum Teil müssen aus einer DLL mehrere Instanzen bzw. Tabs erzeugt werden.
Über das XML-File würden die einzelnen Instanzen dann aber unterschiedliche Parameter bekommen und auch etwas unterschiedliche Aufgaben wahrnehmen.

Gibt's für RegistrationModule Implementierung irgendwo Beispiele wie das ganze aussehen könnte?

F
10.010 Beiträge seit 2004
vor 10 Jahren

Prism benutzt MEF

742 Beiträge seit 2005
vor 10 Jahren

Du könnstest einfach selbst nach Assemblies suchen und diese laden, das sieht dann ungefähr so aus:


interface IUnityRegistrator
{
  void Register(IUnityContainer container); 
}

foreach (string file in Directory.GetFiles("plugins"))
{
   Assembly assembly = Assembly.LoadFile(file);

   Type registratorType = assembly.GetType().Where(x => x.GetInterfaces().Contains(typeof(IUnityRegistrator)).SingleOrDefault();

   if (registratorType != null) 
   {
      IUnityRegistrator reg = (IUnityRegistrator)Activator.CreateInstance(registratorType);

    req.Register(unityContainer);
   }
}

Ich hoffe, das ist selbsterklärend