Nuestro grupo de expertos pasados varios días de investigación y de recopilar de información, dimos con la respuesta, queremos que resulte de gran utilidad para tu trabajo.
Solución:
Use la sobrecarga del delegado de fábrica al registrar el repositorio
//...
var mode = "get value from config";
services.AddScoped(sp =>
var repo = sp.GetRequiredService();
var apiKey = repo.GetApiKeyMethodHere();
return new GlobalRepository(mode, apiKey);
);
//...
Es posible que desee comprobar también estos enlaces…
https://github.com/Microsoft/AspNetCoreInjection.TypedFactories
https://espressocoder.com/2018/10/08/inyectando-un-servicio-de-fabrica-en-asp-net-core/
Con respecto al último enlace, el código es básicamente:
public class Factory : IFactory
private readonly Func _initFunc;
public Factory(Func initFunc)
_initFunc = initFunc;
public T Create()
return _initFunc();
public static class ServiceCollectionExtensions
public static void AddFactory(this IServiceCollection services)
where TService : class
where TImplementation : class, TService
services.AddTransient();
services.AddSingleton>(x => () => x.GetService());
services.AddSingleton, Factory>();
Creo que las fábricas tipificadas de Castle Windsor se deshacen de todo lo que crearon cuando se desechan (lo que puede no ser siempre la mejor idea), con estos enlaces probablemente tendrías que considerar si todavía esperas ese comportamiento. Cuando reconsideré por qué quería una fábrica, terminé simplemente creando una nueva envoltura de fábrica simple, como:
public class DefaultFooFactory: IFooFactory
public IFoo create()return new DefaultFoo();
Si sostienes alguna sospecha y capacidad de acrecentar nuestro escrito puedes ejecutar un exégesis y con deseo lo observaremos.