如何将 Simple Injector 与 EasyNetQ 一起使用?

How to use Simple Injector with EasyNetQ?

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

项目中包含可用的 NuGet 包 'EasyNetQ.DI.SimpleInjector'。添加了类似 InjectionExtensions.RegisterAsEasyNetQContainerFactory(container); 的代码。但是,当尝试创建像 Bus = RabbitHutch.CreateBus(<ConnectionString>) 这样的总线时。它抛出类似

的错误

The container can't be changed after the first call to GetInstance, GetAllInstances and Verify

如果我用像

这样的简单注入器注册 Bus 对象
container.Register<IBus>(() => RabbitHutch.CreateBus(
    "username=guest;password=guest;virtualHost=chidemo;host=localhost"),
    Lifestyle.Singleton);

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

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

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

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

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 构建时并未考虑单独的 configure/build DI 构建步骤,因此容器需要支持组件的运行时注册。

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

也许会提到 'gpauls',他贡献了 SimpleInjector 包,他可能有一个有效的示例解决方案。