using Caliburn.MemoryManagement; using Caliburn.Metadata; using Caliburn.Services; namespace Caliburn.Composition { public class CompositeManager : ICompositeManager { protected readonly WeakDictionary _composites = new WeakDictionary(); #region ICompositeManager Members public virtual void RegisterComposite(string name, object composite) { _composites[name] = composite; } public virtual T GetComposite(string name) where T : IComposite { object composite; _composites.TryGetValue(name, out composite); if(composite != null) { IViewManager viewManager = DI.Resolve(); ElementDefaults defaults = viewManager.GetDefaults(composite.GetType()); if(defaults != null) return (T)defaults.CreateCompositeProxy(composite); return default(T); } return default(T); } #endregion } }