迁移到 NServiceBus 4(从 3.3.7 到 4.0.5)后,我正在尝试运行我的自定义 Saga Persister。我在容器中注册它(我在整个 Web 应用程序中使用的容器),但是在应用程序启动期间我得到了异常:
[ComponentResolutionException:看起来您正在尝试解决一个组件,该组件(直接或间接)依赖于生活方式组件是 PerWebRequest。当前执行的代码不在 Web 请求范围内。分析您的依赖项并更改它们的生活方式(到 signletons)或它们的依赖项。] c:\tfs\Main\src\AppName2\ 中的 CustomApp.Mapping.WebRequestFallingBackToCallContextScopeAccessor.GetScope(CreationContext context) CustomApp\CustomApp.Mapping\WebRequestFallingBackToCallContextScopeAccessor.cs:40 Castle.MicroKernel.Lifestyle.ScopedLifestyleManager.GetScope(CreationContext context) +33 Castle.MicroKernel.Lifestyle.ScopedLifestyleManager.Resolve(CreationContext context, IReleasePolicy releasePolicy) +84 Castle.MicroKernel.Handlers。 DefaultHandler.ResolveCore(CreationContext 上下文,
1.ForEach(Action
1 个动作)+14013700 NServiceBus.Configure.Initialize() 在 c:\BuildAgent\work\d4de8921a0aabf04\src\NServiceBus.Core\Configure.cs:374 NServiceBus.Configure.CreateBus() 在 c:\BuildAgent\work\d4de8921a0aabf04\ src\NServiceBus.Core\Configure.cs:307 CustomApp.Web.Initialization.BusInstaller.Install(IWindsorContainer container, IConfigurationStore store) 在 c:\tfs\Main\src\AppName2\CustomApp\CustomApp.Web\Initialization\BusInstaller.cs :56 Castle.Windsor.WindsorContainer.Install(IWindsorInstaller[] 安装程序,DefaultComponentInstaller 范围) +216 Castle.Windsor.WindsorContainer.Install(IWindsorInstaller[] 安装程序) +124 CustomApp.Web.WindsorContainerProvider.GetInitializedContainer() 在 c:\tfs\ Main\src\AppName2\CustomApp\CustomApp.Web\WindsorContainerProvider.cs:87 CustomApp.Web.MvcApplication。c:\tfs\Main\src\AppName2\CustomApp\CustomApp.Web\Global.asax.cs:265 中的 GetInitializedContainer() 在 c:\tfs\Main\src\AppName2\CustomApp 中的 CustomApp.Web.MvcApplication.Application_Start() \CustomApp.Web\Global.asax.cs:139 CustomApp.Administration.Web.Global.Application_Start() 在 c:\tfs\Main\src\AppName2\CustomApp\Administration\CustomApp.Administration.Web\Global.asax.cs :11
任何想法如何解决这个问题?相同的代码库运行顺利 NServiceBus 3.3.7
编辑: 这就是我初始化 NSB 的方式:
Configure.Serialization.Xml();
Configure.Features.Enable<SecondLevelRetries>();
Configure.Features.Enable<TimeoutManager>();
Configure.Features.Enable<Sagas>();
var conf = Configure.With(assemblies)
.CustomConfigurationSource(new BusConfigSource(assemblies))
.DefineEndpointName(ConfigurationManager.AppSettings["EndpointName"])
.CastleWindsorBuilder(container)
.UseTransport<Msmq>()
.UseInMemoryTimeoutPersister()
.PurgeOnStartup(false)
.FileShareDataBus(WebConfigurationManager.AppSettings["NServiceBusFileShare"])
.UnicastBus()
.LoadMessageHandlers()
.MsmqSubscriptionStorage();
conf.Configurer.ConfigureComponent<CustomSagaPersister>(DependencyLifecycle.InstancePerCall);
conf.CreateBus().Start(() => Configure.Instance.ForInstallationOn<Windows>().Install());
我还尝试了手动将我的 CustomSagaPersiter 添加到容器而不调用的方法
conf.Configurer.ConfigureComponent<CustomSagaPersister>(DependencyLifecycle.InstancePerCall);
但结果是一样的。