【发布时间】:2015-05-04 05:36:43
【问题描述】:
问题:
发送到调用IBus.SendLocal 的WCF 服务的请求创建配置为InstancePerLifetimeScope() 的对象的两个实例
背景:
我正在使用Autofac.Integration.WCF(通过为每个 WCF 请求提供一个新的子范围,使一切都解决“每个请求”)
IBus.SendLocal 调用消息修改器,它被注入与 wcf 服务相同的资源类型
但是,会创建两个不同的实例。一个被注入到服务中,另一个实例被注入到消息修改器中。
我假设,这是因为 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();
【问题讨论】:
-
只是为了确定。此 WCF 服务是否使用 NServiceBus 功能通过 WCF 公开端点?
-
你是如何初始化 NServiceBus 的?您是否通过将容器传递给它来初始化 NServiceBus,如下所述:docs.particular.net/samples/containers/autofac
-
拒绝使用 NSB 功能,WCF 服务是自托管的。是的,根容器被传递到 NSB(与 Autofac WCF 集成使用的相同)
-
感谢您的初始化代码。
标签: c# wcf autofac nservicebus