Base solution for your next web application
Open Closed

SettingsManager and ISettingStore #2660


User avatar
0
bilalhaidar created

Hello,

I am browsing the framework code and noticed this code:

public SettingManager(ISettingDefinitionManager settingDefinitionManager, ICacheManager cacheManager)
        {
            _settingDefinitionManager = settingDefinitionManager;

            AbpSession = NullAbpSession.Instance;
            SettingStore = DefaultConfigSettingStore.Instance;

As you can see it is using the DefaultconfigSettingStore.

Later on, in the Abp.Zero, it defines a new SettingStore.

Where in the solutions, you configure it to use the Abp.Zero.SettingStore and not the default?

Also, every module can have a SettingsProvider to return Settings. Where in the solutions, do you capture all those settings from each module and store them in db?

Many thanks, Bilal

Markdown is supported
Copy & paste or drag & drop images (max 30 MB per image)

12 Answer(s)
  • User Avatar
    0
    bilalhaidar created

    Any idea?

    Markdown is supported
    Copy & paste or drag & drop images (max 30 MB per image)
  • User Avatar
    0
    ismcagdas created
    Support Team

    Hi,

    When a new module adds the same implementation of a class, it is used by default. So module zero adds the implementation.

    About registering setting definitions, it is done in SettingDefinitionManager's Initialize method.

    Markdown is supported
    Copy & paste or drag & drop images (max 30 MB per image)
  • User Avatar
    0
    bilalhaidar created

    Great, I can see it now.

    In the DefinitionManager.Initialize() it saves all settings from all providers.

    SetingsManager uses the SettingsStore to persist to DB.

    I still have one missing link: SettingsManager, where is it called to persist whatever settings DefinitionManager has? I tried to look for that, but couldn't.

    When searching for code how it works, is there like a guide or logical path to follow or starting point?

    Thanks Ismail :)

    Markdown is supported
    Copy & paste or drag & drop images (max 30 MB per image)
  • User Avatar
    0
    ismcagdas created
    Support Team

    Hi,

    It is stored by SettingStore, see <a class="postlink" href="https://github.com/aspnetboilerplate/module-zero/blob/master/src/Abp.Zero/Configuration/SettingStore.cs">https://github.com/aspnetboilerplate/mo ... ngStore.cs</a>.

    Actually you can use AbpKernelModule for tracking such cases, <a class="postlink" href="https://github.com/aspnetboilerplate/aspnetboilerplate/blob/master/src/Abp/AbpKernelModule.cs">https://github.com/aspnetboilerplate/as ... lModule.cs</a>.

    Markdown is supported
    Copy & paste or drag & drop images (max 30 MB per image)
  • User Avatar
    0
    bilalhaidar created

    Thanks Ismail.

    SettingsManger calls SettingsStore to persist data into DB.

    Who calls SettingsManager to persist? Where in time does this happen?

    Thanks

    Markdown is supported
    Copy & paste or drag & drop images (max 30 MB per image)
  • User Avatar
    0
    ismcagdas created
    Support Team

    It happens when you call it in your code.

    Markdown is supported
    Copy & paste or drag & drop images (max 30 MB per image)
  • User Avatar
    0
    bilalhaidar created

    An example maybe? Where does that show? Thanks

    Markdown is supported
    Copy & paste or drag & drop images (max 30 MB per image)
  • User Avatar
    0
    ismcagdas created
    Support Team

    Hi,

    TenantSettingsAppService and HostSettingsAppService are examples of it, you can take a look at them.

    Markdown is supported
    Copy & paste or drag & drop images (max 30 MB per image)
  • User Avatar
    0
    bilalhaidar created

    Great!

    But still first time application loads, who asks the SettingsManager to save any settings in DB? I am sure there are some settings set by SettingsProviders in different modules.

    There might be something missing for me, dunno.

    Thanks again

    Markdown is supported
    Copy & paste or drag & drop images (max 30 MB per image)
  • User Avatar
    0
    bilalhaidar created

    Hi Ismail, I guess I was missing one thing, SettingsDefinitionManager is defined as "Singleton" in the IoC. Therefore, every time the application runs, the settings will be collected from all modules and will be available.

    When a change occurs in Tenant Settings or Host Settings, then values are written on-demand to DB.

    I am not sure though, if the values stored in memory are updated on the spot, or next time they are requested they are read from DB.

    Thanks

    Markdown is supported
    Copy & paste or drag & drop images (max 30 MB per image)
  • User Avatar
    0
    ismcagdas created
    Support Team

    Hi,

    If value of a setting changes, it is updated both in database and setting manager, see <a class="postlink" href="https://github.com/aspnetboilerplate/aspnetboilerplate/blob/master/src/Abp/Configuration/SettingManager.cs#L261">https://github.com/aspnetboilerplate/as ... er.cs#L261</a>.

    There is only one thing, settings are accesible on the client side via "abp.setting.values["NameOfSetting"]". If your setting change request is an ajax request, this client side value is not updated, you will need a page refresh in this case or you can update the client side value as well using regular javascript code like:

    abp.setting.values["NameOfSetting"] = "new value for setting";
    
    Markdown is supported
    Copy & paste or drag & drop images (max 30 MB per image)
  • User Avatar
    0
    bilalhaidar created

    Thanks!

    Markdown is supported
    Copy & paste or drag & drop images (max 30 MB per image)