I've implemented a class with IProvideConfiguration
When my Bus is creating it gets called 4 times. Since there's logic in there to do some gathering of mappings - that logic is also executed 4 times. Do I manually need to keep a flag with 'Initialized' to prevent it from running multiple times or can I use something within NServiceBus or am I using this wrong?
These are the call stacks that lead to the 4 calls:
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
the class implementing IProvideConfiguration
will be created every time a caller tries to access it's configuration (in your case UnicastBusConfig
). You could keep the first created instance as a static variable around and always return the same config instance when GetConfiguration
of your IProvideConfiguration
implementation is called. I'd recommend to move any initialization logic out of the class implementing IProvideConfiguration
.