IConfigurationSource.GetConfiguration called multiple times for the same type

NServiceBus 5.2.24

We have a custom IConfigurationSource that retrieves the endpoint mappings from the database:

public class CustomConfiguration : IConfigurationSource
{
    public T GetConfiguration<T>() where T : class, new()
    {
        if (typeof(T) == typeof(UnicastBusConfig))
        {
            // Retrieve mappings from database
            // ...
            return new UnicastBusConfig { MessageEndpointMappings = mappings } as T;
        }

        return ConfigurationManager.GetSection(typeof(T).Name) as T;
    }
}

But we’ve noticed that GetConfiguration() gets called multiple times for type UnicastBusConfig during the endpoint initialization, thus querying the database and reconstructing the object every time. If this cannot be avoided, is there a way to cache the mappings instead?

@ismaelhamed you’re right, it’s not cached. If the implementation is expensive (i.e. your database call) then you’ll need to cache the result yourself.