1

我可以使用 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 本身是我的问题吗?

4

1 回答 1

1

它应该使用ConnectionMultiplexer构造函数,这似乎是 Simple Injector 无法弄清楚的问题。

似乎您可以为构造函数选择指定策略,并仅覆盖该类型的默认行为。

于 2021-09-11T17:14:36.523 回答