有没有办法将子容器传递到NserviceBus管道?

时间:2015-05-04 05:36:44

标签: c# wcf autofac nservicebus

问题:
发送到WCF服务的请求(调用IBus.SendLocal)会创建配置为InstancePerLifetimeScope()的对象的两个实例

背景:
我正在使用Autofac.Integration.WCF(通过为每个WCF请求提供一个新的子范围,使每个请求都能解决所有问题)

IBus.SendLocal调用一个消息mutator,它被注入与wcf服务相同的资源类型

但是,会创建两个不同的实例。一个注入到服务中,一个不同的实例被注入到消息mutator中。

我假设,这是因为NSB创建了自己的子范围,它基于根容器。

任何想法/指针如何解决此问题(即每个WCF请求只创建一个实例)?

编辑:使用NSB 4.3.2和Autofac 3.5.2

简化配置代码

  Autofac.IContainer container = ConfigureIoc();

  Configure
    .With(AllAssemblies.Matching("this.dll").And("that.dll"))
    .DefineEndpointName("endpoint name here")
    .AutofacBuilder(container)
    .MsmqSubscriptionStorage()
    .UnicastBus()
    .CreateBus()
    .Start();

  ServiceHost host = CreateHost();
  host.AddDependencyInjectionBehavior(typeof(ISomeContract), container);
  host.Open();

1 个答案:

答案 0 :(得分:0)

修改了NServiceBus.Autofac object builder以通过工厂启用子范围解析。

ILifetimeScope工厂返回AutofacInstanceContext.Current.OperationLifetime,这是WCF使用的子容器。

https://github.com/Particular/NServiceBus.Autofac/pull/2