using System; using System.Collections.Generic; using JD.Kernel.StaticHelpers; namespace JD.TeaBoxAddinSystem.Addins.Description.FileReferences { /// /// A reference to an assembly. /// public class AssemblyFileReference : FileReference { #region Inner Types private class AssemblyResourceFileReferenceCollection : AddinObjectCollection { #region Variables private readonly AssemblyFileReference m_owner; #endregion #region Constructor public AssemblyResourceFileReferenceCollection(AssemblyFileReference owner) { System.Diagnostics.Debug.Assert(owner != null); m_owner = owner; } #endregion #region Methods protected override void InsertItem(int index, AssemblyResourceFileReference item) { base.InsertItem(index, item); item.Owner = m_owner; } protected override void ClearItems() { foreach (AssemblyResourceFileReference item in this) { item.Owner = null; } base.ClearItems(); } protected override void SetItem(int index, AssemblyResourceFileReference item) { AssemblyResourceFileReference oldItem = this[index]; base.SetItem(index, item); oldItem.Owner = null; item.Owner = m_owner; } protected override void RemoveItem(int index) { AssemblyResourceFileReference oldItem = this[index]; base.RemoveItem(index); oldItem.Owner = null; } #endregion } #endregion #region Variables private readonly RuntimeAssembly m_runtime; private readonly AssemblyResourceFileReferenceCollection m_resourceFiles; #endregion #region Constructor /// /// Constructor. /// /// /// public AssemblyFileReference(string assemblyName, string hintPath) : base(assemblyName) { m_runtime = new RuntimeAssembly(assemblyName, hintPath); m_resourceFiles = new AssemblyResourceFileReferenceCollection(this); } /// /// Constructor. /// /// public AssemblyFileReference(RuntimeAssembly runtime) : base(runtime == null ? "dummy" : runtime.AssemblyName) { Throw.IfNull(runtime, "runtime"); m_runtime = runtime; m_resourceFiles = new AssemblyResourceFileReferenceCollection(this); } #endregion #region Properties /// /// Runtime associated with this assembly file reference. /// public RuntimeAssembly Runtime { get { return m_runtime; } } /// /// Resource Files. /// public IList ResourceFiles { get { return m_resourceFiles; } } #endregion #region Methods internal override void OnModuleChanged(EventArgs e) { m_resourceFiles.Owner = Module; base.OnModuleChanged(e); } #endregion } }