Laden...

IoC Configuration per File

Erstellt von Fabiano vor einem Jahr Letzter Beitrag vor einem Jahr 619 Views
F
Fabiano Themenstarter:in
27 Beiträge seit 2021
vor einem Jahr
IoC Configuration per File

Hallo zusammen!

Die Frage ist vielleicht einfach, aber ich habe per Google wiklich keine passenden Ergebnisse erhalten.
Ich möchte solche Zeilen:

services.AddScoped<IMyService, MyServiceImplementation>();

durch Konfiguration per Textdatei ersetzen. Das leider nicht mehr weiterentwickelte Unity konnte das und die Funktionalität ist gerade für's Testing ein Riesenvorteil. Lässt sich das auch mit Microsoft.Extensions.DependencyInjection machen?

4.931 Beiträge seit 2008
vor einem Jahr

Wenn ich die richtige Doku dazu erwischt habe, dann sollte es auch eine nicht-generische Überladung dazu geben: AddScoped(IServiceCollection, Type, Type), d.h. du kannst die Type-Parameter dazu aus einem String erzeugen:


string typeString = "MyNamespace.IMyService"; // aus Datei
Type type = Type.GetType(typeString);

(beachte, daß dazu der komplette Namespace davor angegeben sein muß)

F
Fabiano Themenstarter:in
27 Beiträge seit 2021
vor einem Jahr

Ah, du meinst, dass ich die Typnamen zum Mappen/Adden selbst aus einer Datei bzw einer ConfigSection entnehme?
Nicht schlecht, daran hab ich gar nicht gedacht! Ist zwar anfangs etwas umständlicher, aber dafür auch flexibler!

4.931 Beiträge seit 2008
vor einem Jahr

Ja, so meinte ich das.

Bei deinem Google Such Link weiß ich nicht, was du genau meinst. Gefunden habe ich u.a. Revisiting XML Configurations In Unity, d.h. das Mapping mittels einer XML-Datei.
Wie genau jetzt die Datei aussieht, kannst du ja selbst bestimmen.

16.807 Beiträge seit 2008
vor einem Jahr

Das konnten einige Dependency Injection Container (allen voran LightInject), aber die waren ja alle für bewusste Zwecke.
Moderne DI Container sind bewusst typsicherer als früher, weil DI halt leider auch nicht unbedingt das stabilste bzw. simpelste Verfahren ist (weswegen es auch viele Stimmen gegen DI gibt).

Solche Dinge hat man bewusst in moderneren Dingen nicht mehr, um eben die Stabilität zu erhöhen. Du hast auf einer Textdatei-Variante genau 0 Runtime Support und 0 Testbarkeit.
Unity hat sowas, weil Unity (böse ausgedrückt) allgemein eine Ansammlung von Workarounds ha, u.a. weil noch auf uralt .NET basierend.

Wenn Du sowas heute (außerhalb solcher Ökosysteme wie Unity) brauchst, dann ist das eigentlich ein Zeichen, dass womöglich was in Deinem Codeaufgabe / Typ-Aufbau nicht stimmt.
Auch für Testen brauchst Du sowas eigentlich nicht; im Test-Setup würdest Du ja genau die Typen angeben, die für den Test relevant sind.