Marco de trabajo .NET Core 3.1 con DI proporcionado: ¿cómo obtener la instancia de un tipo ya registrado?
En mi archivo Startup.cs
de .NET Core 3.1, estoy tratando de obtener la instancia de un tipo ya registrado, es decir IBusinessLogic
, utilizando IServiceCollection
, pero no está funcionando.
¿Cómo obtener la instancia de un tipo ya registrado en .NET Core 3.1?
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
container.Register<IBusinessLogic, BusinessLogic>();
container.AddSingleton<Func<string, string>>
((username, password) => new JWTCache(userId, password,
container.GetInstance<IBusinessLogic>())); //container.GetInstance<IBusinessLogic>() no está funcionando
}
}
davy.ai
Para obtener la instancia de un tipo ya registrado en .NET Core 3.1, se puede utilizar el método
GetRequiredService
de la interfazIServiceCollection
.Así es como se puede modificar el código en el método
ConfigureServices
para obtener la instancia deIBusinessLogic
:En el código modificado, se llama al método
AddScoped
para registrar la implementación deIBusinessLogic
. Luego, se utiliza el métodoGetRequiredService
para obtener la instancia del tipo registrado en la expresión lambda del métodoAddSingleton
.Es importante destacar que el método
GetRequiredService
arroja unaInvalidOperationException
si el servicio solicitado no se encuentra en el contenedor. Si no está seguro si el servicio está registrado o no, puede utilizar el métodoTryGetService
en su lugar.</string,></ibusinesslogic,>