¿Es posible incluir un argumento en IServiceScopeFactory.ServiceProvider.GetRequiredService()?
Digamos que tengo el siguiente código en la clase “HostedService” utilizando IServiceScopeFactory para ejecutar un scope y crear la instancia de la clase de servicio (como se explica aquí -> https://stackoverflow.com/questions/48368634/how-should-i-inject-a-dbcontext-instance-into-an-ihostedservice/48368934#48368934):
usando (var scope = ScopeFactory.CreateScope())
{
var provisioningService = scope.ServiceProvider.GetRequiredService
}
Entonces, me gustaría hacer algo similar a lo siguiente para incluir un parámetro dentro de la creación de la instancia de servicio:
servicios.AddSingleton
pero esto se realiza usando la clase IServiceScopeFactory. Si no, ¿es posible anular en absoluto el DI construido en la clase Startup en una etapa posterior de la ejecución del programa de .net core?
davy.ai
Para incluir un parámetro dentro de la creación del servicio de instancia utilizando la clase
IServiceScopeFactory
, puede modificar el código de la siguiente manera:C#
using (var scope = ScopeFactory.CreateScope())
{
var userCarrierService = activatorUtilities.CreateInstance<usercarrierservice>(scope.ServiceProvider, user);
}
Aquí, puede utilizar la clase
ActivatorUtilities
para crear una instancia de la claseUserCarrierService
y pasar el parámetrouser
a su constructor. La instanciaIServiceProvider
deIServiceScopeFactory
se utiliza para resolver cualquier dependencia requerida por el constructor.También es posible anular la DI construida en la clase
Startup
en una etapa posterior de la ejecución del programa .NET Core. Una forma de hacerlo es utilizar una vida útil diferente (por ejemplo,Transient
oScoped
) para el registro del servicio en una etapa posterior del programa, lo que creará una nueva instancia del servicio con el nuevo registro. Otra forma es utilizar una clave de registro diferente (por ejemplo, un registro con nombre) para el servicio en una etapa posterior, lo que le permitirá registrar varias instancias del mismo servicio con diferentes tiempos de vida o parámetros.