Ersetzen Sie die Registrierung im service ASP.NET Core-built-in DI-container?

Betrachten wir eine service-Registrierung in Startup.ConfigureServices:

public void ConfigureServices(IServiceCollection services)
{
    services.AddTransient<IFoo, FooA>();
}

Ist es möglich, zu ändern IFoo Registrierung FooB nach AddTransient aufgerufen wurde? Es kann hilfreich sein, für Test-Zwecke (zum Beispiel, in TestStartup Unterklasse) oder, wenn unser Zugang zur Codebasis ist begrenzt.

Wenn wir ein anderes register IFoo Umsetzung:

services.AddTransient<IFoo, FooA>();
services.AddTransient<IFoo, FooB>();

Dann GetService<IFoo> zurück FooB statt FooA:

IFoo service = services.BuildServiceProvider().GetService<IFoo>();
Assert.True(service is FooB);

Jedoch GetServices<IFoo> erfolgreich gibt die beiden Implementierungen (und das gleiche für GetService<IEnumerable<IFoo>>):

var list = services.BuildServiceProvider().GetServices<IFoo>().ToList();
Assert.Equal(2, list.Count);

Es ist Remove(ServiceDescriptor) Methode in IServiceCollection Vertrag. Was soll ich mit ServiceDescriptor zum ändern einer service-Registrierung?

InformationsquelleAutor Ilya Chumakov | 2017-04-24

Schreibe einen Kommentar