Wie registriere ich mehrere Implementierungen einer Schnittstelle in ASP.NET Core ohne manuelle Registrierung?
Posted: 22 Dec 2024, 08:19
Ich verwende C# und .NET 8 und Microsoft.Extensions.DependencyInjection.
Ich habe eine Schnittstelle mit mehr als 30 verschiedenen Klassen, die sie implementieren. Ich möchte IEnumerable in eine andere Klasse mit einer begrenzten Lebensdauer einfügen.
Mir ist klar, dass ich jede der 30 Klassen manuell registrieren kann – etwa so:< /p>
services.AddScoped();
services.AddScoped();
...
services.AddScoped();
Gibt es eine Möglichkeit, dies dynamischer zu erreichen, ohne jede einzelne Klasse manuell registrieren zu müssen?
BEARBEITEN : Ich habe eine Lösung gefunden, die zu funktionieren scheint. Kann mir jemand Feedback geben?
Type baseClass = typeof(IBaseClass);
var types = Assembly.GetAssembly(baseClass)?.
GetTypes().Where(p => !p.IsAbstract && !p.IsInterface && baseClass
.IsAssignableFrom(p));
foreach (Type t in types!)
{
services.AddScoped(typeof(IBaseClass), t);
}
Ich habe eine Schnittstelle mit mehr als 30 verschiedenen Klassen, die sie implementieren. Ich möchte IEnumerable in eine andere Klasse mit einer begrenzten Lebensdauer einfügen.
Mir ist klar, dass ich jede der 30 Klassen manuell registrieren kann – etwa so:< /p>
services.AddScoped();
services.AddScoped();
...
services.AddScoped();
Gibt es eine Möglichkeit, dies dynamischer zu erreichen, ohne jede einzelne Klasse manuell registrieren zu müssen?
BEARBEITEN : Ich habe eine Lösung gefunden, die zu funktionieren scheint. Kann mir jemand Feedback geben?
Type baseClass = typeof(IBaseClass);
var types = Assembly.GetAssembly(baseClass)?.
GetTypes().Where(p => !p.IsAbstract && !p.IsInterface && baseClass
.IsAssignableFrom(p));
foreach (Type t in types!)
{
services.AddScoped(typeof(IBaseClass), t);
}