我可以使用 InMemoryRepository 在 SimpleInjector 容器中注册 MassTranst SagaStateMachine:
container.AddMassTransit(cfg =>
{
// Unrelated registration code ommitted
// ...
cfg.AddSagaStateMachine<FormEvaluateStateMachine, FormEvaluateState>()
.InMemoryRepository();
});
容器是 SimpleInjector 容器。
如果我将其中的行更改为:
cfg.AddSagaStateMachine<FormEvaluateStateMachine, FormEvaluateState>() .RedisRepository() ;
我从简单的注射器得到以下错误:
对于能够创建 RedisSagaRepositoryContextFactory 的容器,它应该只有一个公共构造函数:它有 2 个。有关更多信息,请参阅https://simpleinjector.org/one-constructor。
因此,它试图在某个地方为 RedisSagaRepositoryContextFactory 注册一个实现,它确实有两个构造函数。
有没有优雅的方法来解决这个问题?看起来 SimpleInjector 提供了一个允许多个构造函数的组合,但在系统范围内启用该反模式似乎有点笨拙。
有没有办法告诉 SimpleInjector 只对某些类型执行此操作?我假设我想使用采用 ConnectionMultiplexer 的构造函数,但我不确定。我会用 SimpleInjector 标记我的帖子,但我没有足够的互联网点数。
也许有更好的方法来指定 RedisRepository() 所以这不会发生?
我也在完整的框架中,所以可能没有正确注册 Redis 本身是我的问题吗?