Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
IoC Configuration per File
Fabiano
myCSharp.de - Member



Dabei seit:
Beiträge: 25

Themenstarter:

IoC Configuration per File

beantworten | zitieren | melden

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?
private Nachricht | Beiträge des Benutzers
Th69
myCSharp.de - Experte

Avatar #avatar-2578.jpg


Dabei seit:
Beiträge: 4.487

beantworten | zitieren | melden

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ß)
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Th69 am .
private Nachricht | Beiträge des Benutzers
Fabiano
myCSharp.de - Member



Dabei seit:
Beiträge: 25

Themenstarter:

beantworten | zitieren | melden

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!
private Nachricht | Beiträge des Benutzers
Th69
myCSharp.de - Experte

Avatar #avatar-2578.jpg


Dabei seit:
Beiträge: 4.487

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16.183

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers