使用DI将Servics Fabric ServiceContext注入到Config实现中

时间:2017-06-28 11:57:41

标签: c# autofac azure-service-fabric

我正在尝试使用任何SF服务上下文中提供的“ConfigurationPackage”从SF配置中读取我的配置。我的班级看起来像这样:

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;
}

我正在使用autofac作为我的DI容器,并且当我向SF运行时注册时,可以通过显式捕获对ServiceContext的引用来注册上述类:

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

有没有办法可以在引导程序中注册ServiceContext,理想情况是在引导程序类中?

我目前正在尝试使用Autofac.ServiceFabric来注册我的actor /服务,但是隐藏了ServiceContext,这使得上面的内容更难实现(尽管这样可以更容易维护干净的autofac模块定义)

2 个答案:

答案 0 :(得分:1)

GetActivationContext(中有静态方法FabricRuntime)。您也许可以使用它来注入激活上下文。

在开发过程中,Autofac.ServiceFabric https://github.com/autofac/Autofac.ServiceFabric也可能对您有用。这里有一篇关于它的博客文章https://alexmg.com/introducing-the-autofac-integration-for-service-fabric/,其中还包含示例代码的链接!它目前处于发布前(测试阶段),但过去几个月我一直在使用它。

答案 1 :(得分:1)

PR 8使Autofac.ServiceFabric

中的ServiceContext可用