1

尝试使用 EasyNetQ 配置 Simple Injector DI 库。实现这一目标的正确方法是什么?

项目中包含可用的 NuGet 包“EasyNetQ.DI.SimpleInjector”。添加了类似的代码InjectionExtensions.RegisterAsEasyNetQContainerFactory(container);。但是,当尝试创建像Bus = RabbitHutch.CreateBus(<ConnectionString>). 它抛出了一个错误,比如

首次调用 GetInstance、GetAllInstances 和 Verify 后无法更改容器

如果我使用 Simple Injector 注册 Bus 对象,例如

container.Register<IBus>(() => RabbitHutch.CreateBus(
    "username=guest;password=guest;virtualHost=chidemo;host=localhost"),
    Lifestyle.Singleton);

然后使用构造函数注入它然后它工作正常。但是看起来'EasyNetQ.DI.SimpleInjector'包的正确使用。

任何人都可以建议正确的方法或分享工作代码片段吗?

@dotnetjunkie @gpauls:如果您能提供专家意见,那就太好了!

4

1 回答 1

1

我还没有写包,但如果这样:

container.Register<IBus>(() => RabbitHutch.CreateBus(
    "username=guest;password=guest;virtualHost=chidemo;host=localhost"),
    Lifestyle.Singleton);

为您工作,这对我来说似乎是一个完全合法的解决方案。

这是一个单元测试,但它似乎只是模拟 IBus,而不是实例化它: https ://github.com/EasyNetQ/EasyNetQ/blob/master/Source/EasyNetQ.DI.Tests/SimpleInjectorAdapterTests.cs

不幸的是,EasyNetQ 在构建 DI 时并未考虑单独的配置/构建步骤,因此容器需要支持组件的运行时注册。

如果它对您不起作用,请在此处提交问题: https ://github.com/EasyNetQ/EasyNetQ/issues

也许提到“gpauls”,他贡献了 SimpleInjector 包,他可能有一个工作示例解决方案。

于 2016-09-29T09:22:59.913 回答