C# 使用DI将Servics Fabric ServiceContext注入配置实现

C# 使用DI将Servics Fabric ServiceContext注入配置实现,c#,autofac,azure-service-fabric,C#,Autofac,Azure Service Fabric,我正在尝试使用任何SF服务上下文中提供的“ConfigurationPackage”从SF配置中读取配置。我的班级是这样的: internal class ServiceFabricDbConfiguration : IDbConnectionConfig { private ConfigurationPackage _configurationPackage; public ServiceFabricDbConfiguration(ServiceContext context

我正在尝试使用任何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来注册我的参与者/服务,但这会隐藏ServiceContext,因此很难再次实现上述功能(尽管这会使维护干净的Autofac模块定义变得更容易)

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


在开发过程中,还有Autofac.ServiceFabric,它可能对您有用。这里有一篇关于它的博客文章,其中还包含指向示例代码的链接!它目前处于预发布(beta版),但在过去几个月里我一直在使用它,没有问题。

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


在开发过程中,还有Autofac.ServiceFabric,它可能对您有用。这里有一篇关于它的博客文章,其中还包含指向示例代码的链接!它目前处于预发布(beta版),但在过去几个月里我一直在使用它,没有任何问题。

使ServiceContext在Autofac中可用。ServiceFabric

使ServiceContext在Autofac中可用。ServiceFabric

不确定您的引导程序类是什么,但不管。。在
FabricRuntime
中有静态方法
GetActivationContext()
。你不能使用这个吗?我想,如果你还没有,认真考虑服务织物AutoFac扩展。这是即时消息测试版,但我一直在使用它没有问题。啊-我没有注意到FabricRuntime(一直在使用FabricClient,但是ServiceContext无法通过此链接获得)-这太完美了,谢谢Mardoxx。如果你加上这个作为回答,我会接受的。是的,我只是将我们的项目改为使用Autofac.ServiceFabric,但我不认为他们有用于此的内置扩展?[抱歉-Bootstrapper是具有autofac注册的类]什么是“内置扩展”?这里有一个nuget软件包:虽然我不确定他打算什么时候发布它!如果你看一下git存储库上的已解决问题,他已经非常有帮助地回答了我的一些关注和问题,这些可能值得一读!抱歉-我指的是一个内置扩展,用于向autofac注册ActivationContext-我将添加我们自己的扩展。谢谢你的帮助!不确定您的引导程序类是什么,但无论如何。。在
FabricRuntime
中有静态方法
GetActivationContext()
。你不能使用这个吗?我想,如果你还没有,认真考虑服务织物AutoFac扩展。这是即时消息测试版,但我一直在使用它没有问题。啊-我没有注意到FabricRuntime(一直在使用FabricClient,但是ServiceContext无法通过此链接获得)-这太完美了,谢谢Mardoxx。如果你加上这个作为回答,我会接受的。是的,我只是将我们的项目改为使用Autofac.ServiceFabric,但我不认为他们有用于此的内置扩展?[抱歉-Bootstrapper是具有autofac注册的类]什么是“内置扩展”?这里有一个nuget软件包:虽然我不确定他打算什么时候发布它!如果你看一下git存储库上的已解决问题,他已经非常有帮助地回答了我的一些关注和问题,这些可能值得一读!抱歉-我指的是一个内置扩展,用于向autofac注册ActivationContext-我将添加我们自己的扩展。谢谢你的帮助!事实上,没有。它使用LifetimeScope将ServiceContext的可用性限制为服务的实例化,并且不使其可用于在Autofac容器中注册的其他服务。实际上,不,它不允许。它使用生存时间范围将ServiceContext的可用性限制为服务的实例化,而不使其可用于在Autofac容器中注册的其他服务。