Catel.Modules.DownloadingModuleCatalog.LoadModule C# (CSharp) Method

LoadModule() public method

Loads a specific module.
The is null or whitespace. The is null.
public LoadModule ( string moduleName, System.Action completedCallback ) : void
moduleName string Name of the module.
completedCallback System.Action The completed callback.
return void
        public void LoadModule(string moduleName, Action completedCallback)
        {
            Argument.IsNotNull("moduleName", moduleName);
            Argument.IsNotNull("completedCallback", completedCallback);

            var moduleInfo = GetModuleInfoByName(moduleName);
            if (moduleInfo == null)
            {
                throw Log.ErrorAndCreateException<NotSupportedException>("Module '{0}' is not registered in this catalog", moduleName);
            }

            if (_loadedModules.ContainsKey(moduleName))
            {
                Log.Debug("Module is already loaded, invoking completed callback immediately");

                completedCallback();
                return;
            }

            if (_pendingLoads.ContainsKey(moduleName))
            {
                Log.Debug("Module is already being loaded, queueing completed callback");

                _pendingLoads[moduleName].Enqueue(completedCallback);
                return;
            }

            var pendingQueue = new Queue<Action>();
            pendingQueue.Enqueue(completedCallback);

            _pendingLoads.Add(moduleName, pendingQueue);

            Log.Debug("Searching for dependent modules of module '{0}'", moduleInfo.ModuleName);

            var dependencies = GetDependentModules(moduleInfo).ToList();
            LoadModules(dependencies, () => DownloadModule(moduleInfo));
        }