Saltar al contenido

Uso de Factory Pattern con la inyección de dependencia de ASP.NET Core

Solución:

Utilice la sobrecarga de delegado de fábrica al registrar el repositorio

//...

var mode = "get value from config";

services.AddScoped<ICardPaymentRepository, GlobalRepository>(sp => {        
    var repo = sp.GetRequiredService<IDbRepository>();
    var apiKey = repo.GetApiKeyMethodHere();

    return new GlobalRepository(mode, apiKey);
});

//...

Es posible que desee consultar también estos enlaces …

https://github.com/Microsoft/AspNetCoreInjection.TypedFactories

Injecting a Factory Service in ASP.NET Core

Respecto al último enlace el código es básicamente:

public class Factory<T> : IFactory<T>
{
    private readonly Func<T> _initFunc;

    public Factory(Func<T> initFunc)
    {
        _initFunc = initFunc;
    }

    public T Create()
    {
        return _initFunc();
    }
}

public static class ServiceCollectionExtensions
{
    public static void AddFactory<TService, TImplementation>(this IServiceCollection services) 
    where TService : class
    where TImplementation : class, TService
    {
        services.AddTransient<TService, TImplementation>();
        services.AddSingleton<Func<TService>>(x => () => x.GetService<TService>());
        services.AddSingleton<IFactory<TService>, Factory<TService>>();
    }
}

Creo que las fábricas mecanografiadas de Castle Windsor eliminan todo lo que crearon cuando ellas mismas se eliminan (lo que puede no ser siempre la mejor idea), con estos enlaces probablemente tendrías que considerar si aún esperas ese comportamiento. Cuando reconsideré por qué quería una fábrica, terminé creando una fábrica simple que envolvía una nueva, como por ejemplo:

public class DefaultFooFactory: IFooFactory{
  public IFoo create(){return new DefaultFoo();}
}
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *