Search code examples
cachingdotnetnuke

Dnn 8: caching module settings


I put some module settings via

var moduleController = new ModuleController();
moduleController.UpdateModuleSetting(moduleId, "key", value);

Later if I try to access the setting using

var rcModule = ModuleController.Instance.GetModuleByDefinition(PortalSettings.PortalId, "MyModule");
var value = rcModule.ModuleSettings["value"]?.ToString() ?? string.Empty;

the same value is returned (even if I resave the setting) until I clear the app cache. The value is correct after every saving settings in the database but not in the module. I also tried to add ModuleController.SynchronizeModule(moduleId); to my save settings method but it didn't help. Module and page cache both disabled. What's wrong?


Solution

  • You are creating a new instance of moduleController, not getting the existing one from memory.

    You can clear the cache programmatically.

    DotNetNuke.Common.Utilities.DataCache.ClearModuleCache(TabId);
    DotNetNuke.Common.Utilities.DataCache.ClearTabsCache(PortalId);
    DotNetNuke.Common.Utilities.DataCache.ClearPortalCache(PortalId, false);
    

    Or get the correct instance and edit the properties.

    ModuleInfo moduleInfo = ModuleController.Instance.GetModule(ModuleId, TabId, false);
    moduleInfo.ModuleTitle = "New Title";
    ModuleController.Instance.UpdateModule(moduleInfo);