/ / Inyectando Servics Fabric ServiceContext en implementaciones de configuración usando DI - c #, autofac, azure-service-fabric

Inyectando Service Fabric FabricContext en implementaciones de Config usando DI - c #, autofac, azure-service-fabric

Estoy tratando de leer mi configuración desde la configuración de SF usando el "Paquete de configuración" que está disponible en cualquier contexto de servicio de SF. Mi clase se parece a esto:

internal class ServiceFabricDbConfiguration : IDbConnectionConfig
{
private ConfigurationPackage _configurationPackage;

public ServiceFabricDbConfiguration(ServiceContext context)
{
_configurationPackage = context.CodePackageActivationContext.GetConfigurationPackageObject("Config");
}

public string UserName =>
_configurationPackage.Settings.Sections["Db_Configuration"]
.Parameters[
"Username"]
.Value;
}

Estoy usando autofac como mi contenedor DI, y puedo registrar la clase anterior capturando explícitamente una referencia a ServiceContext cuando lo registro con el tiempo de ejecución de SF:

ServiceRuntime.RegisterServiceAsync("ApiType",
context =>
{
Bootstrapper.SetContext(context);
return new Api(context);
})
.GetAwaiter()
.GetResult();

¿Hay alguna manera de que pueda registrar el ServiceContext con el bootstrapper, idealmente dentro de la clase de bootstrapper?

Actualmente estoy experimentando con el uso de Autofac.ServiceFabric para registrar mis actores / servicios, pero eso oculta el ServiceContext, lo que hace que sea más difícil volver a lograr lo anterior (aunque hace que sea mucho más fácil mantener las definiciones de los módulos de autofac limpio)

Respuestas

1 para la respuesta № 1

Ahí está el método estático GetActivationContext() en FabricRuntime. Quizás podrías usar esto para inyectar el contexto de activación.

También hay, en desarrollo, Autofac.ServiceFabric https://github.com/autofac/Autofac.ServiceFabric que puede ser de utilidad para usted. Hay una publicación en el blog al respecto aquí. https://alexmg.com/introducing-the-autofac-integration-for-service-fabric/ que también contiene enlaces a código de ejemplo! Está en versión preliminar (beta) en este momento, pero lo he estado usando sin problemas durante los últimos meses.


1 para la respuesta № 2

PR 8 hace que ServiceContext esté disponible en Autofac.ServiceFabric