IProvideConfiguration类,如UnicastBusConfig被多次调用
本文关键字:调用 UnicastBusConfig IProvideConfiguration | 更新日期: 2023-09-27 18:01:35
我已经用IProvideConfiguration实现了一个类
当我的总线创建时,它被调用4次。因为有逻辑在那里做一些映射的收集-逻辑也执行了4次。我是否手动需要保持一个"初始化"的标志,以防止它多次运行,或者我可以在NServiceBus中使用一些东西,或者我使用这个错误?
这些是导致4个调用的调用堆栈:
RZ.Integration.Server.dll!RZ.Integration.Config.NServiceBus.UnicastBusConfigProvider.GetConfiguration() Line 25 C#
NServiceBus.Core.dll!NServiceBus.SettingsExtentions.GetConfigSection<NServiceBus.Config.UnicastBusConfig>(NServiceBus.Settings.ReadOnlySettings settings) Unknown
NServiceBus.Core.dll!NServiceBus.Features.ForwardReceivedMessages.GetConfiguredForwardMessageQueue(NServiceBus.Features.FeatureConfigurationContext context) Unknown
NServiceBus.Core.dll!NServiceBus.Features.ForwardReceivedMessages..ctor.AnonymousMethod__0_0(NServiceBus.Features.FeatureConfigurationContext config) Unknown
NServiceBus.Core.dll!NServiceBus.Features.Feature.CheckPrerequisites(NServiceBus.Features.FeatureConfigurationContext context) Unknown
NServiceBus.Core.dll!NServiceBus.Features.FeatureActivator.HasAllPrerequisitesSatisfied(NServiceBus.Features.Feature feature, NServiceBus.Features.FeatureDiagnosticData diagnosticData, NServiceBus.Features.FeatureConfigurationContext context) Unknown
NServiceBus.Core.dll!NServiceBus.Features.FeatureActivator.ActivateFeature(NServiceBus.Features.FeatureActivator.FeatureState featureState, System.Collections.Generic.IEnumerable<NServiceBus.Features.FeatureActivator.FeatureState> featuresToActivate, NServiceBus.Features.FeatureConfigurationContext context) Unknown
NServiceBus.Core.dll!NServiceBus.Features.FeatureActivator.SetupFeatures(NServiceBus.Features.FeatureConfigurationContext context) Unknown
NServiceBus.Core.dll!NServiceBus.Configure.Initialize() Unknown
NServiceBus.Core.dll!NServiceBus.Bus.Create(NServiceBus.BusConfiguration configuration) Unknown
RZ.Integration.Server.dll!RZ.Integration.Config.NServiceBus.UnicastBusConfigProvider.GetConfiguration() Line 25 C#
NServiceBus.Core.dll!NServiceBus.SettingsExtentions.GetConfigSection<NServiceBus.Config.UnicastBusConfig>(NServiceBus.Settings.ReadOnlySettings settings) Unknown
NServiceBus.Core.dll!NServiceBus.Features.TimeoutManagerBasedDeferral.GetTimeoutManagerAddress(NServiceBus.Features.FeatureConfigurationContext context) Unknown
NServiceBus.Core.dll!NServiceBus.Features.TimeoutManagerBasedDeferral.Setup(NServiceBus.Features.FeatureConfigurationContext context) Unknown
NServiceBus.Core.dll!NServiceBus.Features.FeatureActivator.ActivateFeature(NServiceBus.Features.FeatureActivator.FeatureState featureState, System.Collections.Generic.IEnumerable<NServiceBus.Features.FeatureActivator.FeatureState> featuresToActivate, NServiceBus.Features.FeatureConfigurationContext context) Unknown
NServiceBus.Core.dll!NServiceBus.Features.FeatureActivator.SetupFeatures(NServiceBus.Features.FeatureConfigurationContext context) Unknown
NServiceBus.Core.dll!NServiceBus.Configure.Initialize() Unknown
NServiceBus.Core.dll!NServiceBus.Bus.Create(NServiceBus.BusConfiguration configuration) Unknown
RZ.Integration.Server.dll!RZ.Integration.Config.NServiceBus.UnicastBusConfigProvider.GetConfiguration() Line 25 C#
NServiceBus.Core.dll!NServiceBus.SettingsExtentions.GetConfigSection<NServiceBus.Config.UnicastBusConfig>(NServiceBus.Settings.ReadOnlySettings settings) Unknown
NServiceBus.Core.dll!NServiceBus.Features.UnicastBus.RegisterMessageOwnersAndBusAddress(NServiceBus.Features.FeatureConfigurationContext context, System.Collections.Generic.IEnumerable<System.Type> knownMessages) Unknown
NServiceBus.Core.dll!NServiceBus.Features.UnicastBus.Setup(NServiceBus.Features.FeatureConfigurationContext context) Unknown
NServiceBus.Core.dll!NServiceBus.Features.FeatureActivator.ActivateFeature(NServiceBus.Features.FeatureActivator.FeatureState featureState, System.Collections.Generic.IEnumerable<NServiceBus.Features.FeatureActivator.FeatureState> featuresToActivate, NServiceBus.Features.FeatureConfigurationContext context) Unknown
NServiceBus.Core.dll!NServiceBus.Features.FeatureActivator.SetupFeatures(NServiceBus.Features.FeatureConfigurationContext context) Unknown
NServiceBus.Core.dll!NServiceBus.Configure.Initialize() Unknown
NServiceBus.Core.dll!NServiceBus.Bus.Create(NServiceBus.BusConfiguration configuration) Unknown
RZ.Integration.Server.dll!RZ.Integration.Config.NServiceBus.UnicastBusConfigProvider.GetConfiguration() Line 25 C#
NServiceBus.Core.dll!NServiceBus.SettingsExtentions.GetConfigSection<NServiceBus.Config.UnicastBusConfig>(NServiceBus.Settings.ReadOnlySettings settings) Unknown
NServiceBus.Core.dll!NServiceBus.Transports.Msmq.TimeToBeReceivedOverrideCheck.Run(NServiceBus.Configure config) Unknown
NServiceBus.Core.dll!NServiceBus.Configure.Initialize() Unknown
NServiceBus.Core.dll!NServiceBus.Bus.Create(NServiceBus.BusConfiguration configuration) Unknown
实现IProvideConfiguration
的类将在每次调用者试图访问它的配置(在您的示例中是UnicastBusConfig
)时创建。您可以将第一个创建的实例保留为静态变量,并在调用IProvideConfiguration
实现的GetConfiguration
时始终返回相同的配置实例。我建议将任何初始化逻辑移出实现IProvideConfiguration
的类。