如何在EasyNetQ中使用Simple Injector?

时间:2016-09-28 13:19:50

标签: c# rabbitmq simple-injector easynetq

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

有NuGet包可用&#39; EasyNetQ.DI.SimpleInjector&#39;它包含在项目中。添加了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:如果你能提供专家意见,那就太棒了!

1 个答案:

答案 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包,他可能有一个可行的样本解决方案。