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的类将在每次调用者试图访问它的配置(在您的示例中是UnicastBusConfig)时创建。您可以将第一个创建的实例保留为静态变量,并在调用IProvideConfiguration实现的GetConfiguration时始终返回相同的配置实例。我建议将任何初始化逻辑移出实现IProvideConfiguration的类。