NServiceBus Autofac 子作用域

NServiceBus Autofac child scope

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

我有一些在自定义 Autofac 模块中注册的通用接口 ILogger(通过覆盖 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 作用域?

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

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

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
});