【问题标题】:NServiceBus Autofac child scopeNServiceBus Autofac 子范围
【发布时间】:2018-02-13 01:46:56
【问题描述】:

我正在使用带有 NServiceBus.Autofac 包的 NServiceBus 6。

我有一些通用接口 ILogger,它在自定义 Autofac 模块中注册(通过覆盖 AttachToComponentRegistration 方法)

不幸的是,当我使用 子 Autofac 容器 配置 NServiceBus 时,我的所有消息处理程序都无法解析 ILogger 依赖项。

        endpointConfiguration.UseContainer<AutofacBuilder>(
        customizations: customizations =>
        {
            var childContainer = _container.BeginLifetimeScope();
            customizations.ExistingLifetimeScope(childContainer);
        });

但是,当 NServceBus 以下列方式配置时,一切正常(没有子作用域 = 只有根容器):

        endpointConfiguration.UseContainer<AutofacBuilder>(
        customizations: customizations =>
        {
            customizations.ExistingLifetimeScope(_container);
        });

NServiceBus 是否正确支持子 Autofac 作用域?

【问题讨论】:

标签: c# containers inversion-of-control autofac nservicebus


【解决方案1】:

这与 Autofac 如何处理子生命周期范围内的模块有关。似乎子范围内的模块未按预期处理。 Github issuehere.

一个快速的解决方法是在您创建新的生命周期范围时重新注册模块:

endpointConfiguration.UseContainer<AutofacBuilder>(
customizations: customizations =>
{
    var childScope = _container.BeginLifetimeScope(b => b.RegisterModule<NLogModule>());

    customizations.ExistingLifetimeScope(childScope); // THIS LINE DOESN'T WORK PROPERLY
    //customizations.ExistingLifetimeScope(_container); // THIS LINE WORKS
});

【讨论】:

    猜你喜欢
    • 2021-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多