Como remover um serviço padrão do contêiner de IoC do núcleo .net?

Uma das coisas bonitas do núcleo .net é que ele é muito modular e configurável.

Um aspecto importante dessa flexibilidade é que ele utiliza uma IoC para registrar serviços, geralmente por meio de interfaces. Em teoria, isso permite substituir um serviço .net padrão por uma implementação personalizada desse serviço com muito pouco esforço.

Isso tudo parece incrível em teoria. Mas tenho um caso de trabalho real em que desejo substituir um serviço principal .net padrão pelo meu e não consigo descobrir como remover o serviço padrão.

Mais especificamente, no arquivo Startup.csConfigureServices método, quandoservices.AddSession() é chamado de registra umDistributedSessionStore vai o seguinte código:

 services.AddTransient<ISessionStore, DistributedSessionStore>();

como pode ser visto no código fonte:https://github.com/aspnet/Session/blob/rel/1.1.0/src/Microsoft.AspNetCore.Session/SessionServiceCollectionExtensions.cs

Gostaria de substituir esse ISessionStore por um de minha própria criação. Então, se eu tiver uma aulaRonsSessionStore:ISessionStore que desejo usar para substituir o ISessionStore atualmente registrado, como posso fazer isso?

Sei que posso registrar meu ISessionStore no Startup.csConfigureServices através do seguinte método:

 services.AddTransient<ISessionStore, RonsSessionStore>();

Mas como posso remover o já registradoDistributedSessionStore?

Eu tentei fazer isso no startup.csConfigureServices método via

 services.Remove(ServiceDescriptor.Transient<ISessionStore, DistributedSessionStore>());

mas não teve efeito e o DistributedSessionStore ainda estava no contêiner de IoC. Alguma ideia?

Como remover um serviço da IoC no diretórioConfigureServices método do startup.cs?

questionAnswers(2)

yourAnswerToTheQuestion