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)