using System; using System.Collections.Generic; using System.Collections.ObjectModel; using Caliburn.Metadata; using Caliburn.Services; namespace Caliburn.Modules { public class ModuleManager : IModuleManager { private readonly List _loadedModules = new List(); private readonly IModuleLocator _moduleLocator; public ModuleManager(IModuleLocator moduleLocator) { _moduleLocator = moduleLocator; _moduleLocator.ModuleFound += LoadModule; } #region IModuleManager Members public virtual IList List { get { return new ReadOnlyCollection(_loadedModules); } } public virtual void LoadModule(Module module) { module.Load(); _loadedModules.Add(module); } public virtual void RefreshModules() { foreach(Module module in _loadedModules) { module.Unload(); } _loadedModules.Clear(); _moduleLocator.Search(); } public virtual Module CreateModule(Type moduleType) { Module module = new Module( (IModule) Activator.CreateInstance(moduleType) ); object[] attributes = moduleType.GetCustomAttributes(true); foreach(object att in attributes) { MetadataProvider provider = att as MetadataProvider; if(provider != null) module.AddMetadata(provider); } return module; } #endregion } }