首页 文章

如何在EasyNetQ中使用Simple Injector?

提问于
浏览
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:如果你能提供专家意见,那就太棒了!

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

相关问题