尝试使用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);
然后使用构造函数注入它然后它工作正常。但是,看起来它并没有正确使用&#39; EasyNetQ.DI.SimpleInjector&#39;封装
有人可以建议正确的方法或分享工作代码段吗?
@dotnetjunkie @gpauls:如果你能提供专家意见,那就太棒了!
答案 0 :(得分: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
不幸的是,对于DI构造,EasyNetQ没有针对单独的配置/构建步骤构建,因此容器需要支持组件的运行时注册。
如果它不能以某种方式为您工作,请在此处提出问题: https://github.com/EasyNetQ/EasyNetQ/issues
也许可以提及&#39; gpauls&#39;,他贡献了SimpleInjector包,他可能有一个可行的样本解决方案。