2017-09-04 61 views
1

我使用NServiceBus 6 NServiceBus.Autofac包。NServiceBus Autofac子范围

我有这(通过覆盖AttachToComponentRegistration法)注册自定义模块Autofac一些常用的接口ILogger

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

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

不NServiceBus支持孩子Autofac范围正常:当NServceBus按以下方式(无子作用域=只有根容器)配置

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

然而,一切都运行完美?

+0

新增[示例项目(https://gitlab.com/alex_sk_/nsb_logging/blob/master /NSB_Logging/Program.cs#L35) –

回答

1

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