问题:
发送到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();
答案 0 :(得分:0)
修改了NServiceBus.Autofac
object builder以通过工厂启用子范围解析。
ILifetimeScope
工厂返回AutofacInstanceContext.Current.OperationLifetime
,这是WCF使用的子容器。