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
});
我正在使用带有 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
});