es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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
    }
}
Tags:  , , , ,

Answer

  1. Avatar for 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 interfaz IServiceCollection.

    Así es como se puede modificar el código en el método ConfigureServices para obtener la instancia de IBusinessLogic:

    public class Startup
    {
        public void ConfigureServices(IServiceCollection services)
        {    
            services.AddScoped<ibusinesslogic, businesslogic="">();
    
            services.AddSingleton<><string, string="">>((username, password) =>
                new JWTCache(
                    userId,
                    password,
                    services.GetRequiredService<ibusinesslogic>()
                )
            );
        }
    }
    

    En el código modificado, se llama al método AddScoped para registrar la implementación de IBusinessLogic. Luego, se utiliza el método GetRequiredService para obtener la instancia del tipo registrado en la expresión lambda del método AddSingleton.

    Es importante destacar que el método GetRequiredService arroja una InvalidOperationException 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étodo TryGetService en su lugar.</string,></ibusinesslogic,>

Comments are closed.