NServiceBus 4 (3.3.7 から 4.0.5) に移行した後、カスタムの Saga Persister を実行しようとしています。コンテナー (Web アプリケーション全体で使用するもの) に登録していますが、アプリケーションの起動中に例外が発生します:
[ComponentResolutionException: ライフスタイルであるコンポーネントに (直接的または間接的に) 依存するコンポーネントを解決しようとしているようです。これは PerWebRequest です。現在実行されているコードは Web リクエスト スコープ内にありません。依存関係を分析し、ライフスタイルを (signletons に) 変更するか、依存関係を変更してください。 CustomApp\CustomApp.Mapping\WebRequestFallingBackToCallContextScopeAccessor.cs:40 Castle.MicroKernel.Lifestyle.ScopedLifestyleManager.GetScope(CreationContext コンテキスト) +33 Castle.MicroKernel.Lifestyle.ScopedLifestyleManager.Resolve(CreationContext コンテキスト、IReleasePolicy releasePolicy) +84 Castle.MicroKernel.Handlers。 DefaultHandler.ResolveCore(CreationContext コンテキスト、
1.ForEach(Action
1 アクション) +14013700 NServiceBus.Configure.Initialize() in c:\BuildAgent\work\d4de8921a0aabf04\src\NServiceBus.Core\Configure.cs:374 NServiceBus.Configure.CreateBus() in c:\BuildAgent\work\d4de8921a0aabf04\ c:\tfs\Main\src\AppName2\CustomApp\CustomApp.Web\Initialization\BusInstaller.cs の src\NServiceBus.Core\Configure.cs:307 CustomApp.Web.Initialization.BusInstaller.Install (IWindsorContainer コンテナー、IConfigurationStore ストア) :56 Castle.Windsor.WindsorContainer.Install(IWindsorInstaller[] インストーラー、DefaultComponentInstaller スコープ) +216 Castle.Windsor.WindsorContainer.Install(IWindsorInstaller[] インストーラー) +124 CustomApp.Web.WindsorContainerProvider.GetInitializedContainer() in 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() in 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);
しかし、結果は同じです。