Wie implementieren ich einen „strengen“ Modus zum Hinzufügen zu IServiceCollection?C#

Ein Treffpunkt für C#-Programmierer
Guest
 Wie implementieren ich einen „strengen“ Modus zum Hinzufügen zu IServiceCollection?

Post by Guest »

Ich habe damit begonnen, so etwas wie den „strengen“ Modus für IServiceCollection zu implementieren, der eine Ausnahme (oder, wenn möglich, sogar eine AggregateException) auslöst, wenn eine AddXXX-Erweiterungsmethode eine überschreiben würde bereits registrierte Abhängigkeit. Die Hauptmotivation besteht darin, sicherzustellen, dass bei allen AddXXX-Methoden in meiner Codebasis, zu denen andere beitragen, einige Abhängigkeiten nicht versehentlich überschrieben werden.
Was ich bisher habe, ist eine Erweiterungsmethode AsStrict() für IServiceCollection, die eine Instanz einer benutzerdefinierten IStrictServiceCollection-Schnittstelle zurückgibt (die IServiceCollection zur Verkettung erweitert), die ihre einzige Methode AsNormal(). Es verwendet die erfasste IServiceCollection-Instanz zur Weiterleitung für die ICollection-Methoden mit Ausnahme von Add, wo ich die Ausnahmelogik auf TryAddEnumerable mit ein paar zusätzlichen if-Klauseln im Hauptteil der Schleife:

Code: Select all

int count = services.Count;
for (int i = 0; i < count; i++) {
ServiceDescriptor service = services[i];
if (service.ServiceType == descriptor.ServiceType &&
service.GetImplementationType() == implementationType &&
object.Equals(service.ServiceKey, descriptor.ServiceKey)) {
// Already added
// no return but
throw new InvalidOperationException(...)
}
}

services.Add(descriptor);
Die Verwendung wäre:

Code: Select all

services.AddX()
.AsStrict()
.AddY()
.AddZ()
.AsNormal()
.AddXXX
damit ich Ausnahmen von einem Teil der Dienstregistrierungskette oder der gesamten erfassen konnte. Ich bin bereits auf einige „normale“ Grenzfälle gestoßen, die mich dazu veranlasst haben, diese Frage zu stellen, in der Hoffnung, dass jemand die meisten/wenn nicht alle kennt und über eine robustere Implementierung verfügt.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post