gpt4 book ai didi

c# - 使用 Autofac 注册 IReliableStateManagerReplica

转载 作者:行者123 更新时间:2023-11-30 12:54:38 26 4
gpt4 key购买 nike

我有具有以下构造函数的有状态服务结构服务。

public StatefuleService(StatefulServiceContext context, IReliableStateManagerReplica manager,
IActorProxyFactory actorProxyFactory = null)
: base(context, manager)
{
ActorProxyFactory = actorProxyFactory ?? new ActorProxyFactory();
}

我正在使用 Autofac 来注册组件。如何使用 Autofac 注册 IReliableStateManagerReplica?我试过了

builder.RegisterType<ReliableStateManager>().As<IReliableStateManagerReplica>().SingleInstance;

但它给出了以下异常:

None of the constructors found with 'Autofac.Core.Activators.Reflection.DefaultConstructorFinder' on type 'Microsoft.ServiceFabric.Data.ReliableStateManager' can be invoked with the available services and parameters: Cannot resolve parameter 'System.Fabric.StatefulServiceContext serviceContext' of constructor 'Void .ctor(System.Fabric.StatefulServiceContext, Microsoft.ServiceFabric.Data.ReliableStateManagerConfiguration)'.

最佳答案

构造函数 StatefulService(StatefulServiceContext, IReliableStateManagerReplica) 的目的是用非默认可靠初始化 StatefulService 类的新实例状态管理器副本。

这意味着,您已经使用自定义逻辑实现了自己版本的可靠状态提供程序,并且不想使用 Service Fabric 实现的默认版本。

如果不是这种情况,您应该使用默认构造函数StatefulService(StatefulServiceContext),如果您需要访问 StateManager,您可以从 ((StatefulServiceContext)context) 访问它.StateManager

我给你的另一个建议是,你不应该使用 DI 创建 StatefulService,因为 StatefulServiceContext 是在运行时创建的,多个副本\分区可以重用同一个进程在共享主机中,这意味着您可能有多个 StatefulServiceContext 而 DI 不知道要使用哪个。

请看一下另一个 SO: Set up Dependency Injection on Service Fabric using default ASP.NET Core DI container

关于c# - 使用 Autofac 注册 IReliableStateManagerReplica,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54644428/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com