/// <summary> /// Initializes a new instance of the <see cref="AggregateCatalog"/> class /// with the specified catalogs. /// </summary> /// <param name="catalogs"> /// An <see cref="IEnumerable{T}"/> of <see cref="ComposablePartCatalog"/> objects to add /// to the <see cref="AggregateCatalog"/>; or <see langword="null"/> to /// create an <see cref="AggregateCatalog"/> that is empty. /// </param> /// <exception cref="ArgumentException"> /// <paramref name="catalogs"/> contains an element that is <see langword="null"/>. /// </exception> public AggregateCatalog(IEnumerable<ComposablePartCatalog> catalogs) { Requires.NullOrNotNullElements(catalogs, "catalogs"); this._catalogs = new ComposablePartCatalogCollection(catalogs, this.OnChanged, this.OnChanging); this._partsQuery = this._catalogs.AsQueryable().SelectMany(catalog => catalog.Parts); }
private void Initialize(string path, string searchPattern) { this._path = path; this._fullPath = GetFullPath(path); this._searchPattern = searchPattern; this._assemblyCatalogs = new Dictionary<string, AssemblyCatalog>(); this._catalogCollection = new ComposablePartCatalogCollection(null); this._loadedFiles = GetFiles().ToReadOnlyCollection(); foreach (string file in this._loadedFiles) { AssemblyCatalog assemblyCatalog = null; assemblyCatalog = CreateAssemblyCatalogGuarded(file); if (assemblyCatalog != null) { this._assemblyCatalogs.Add(file, assemblyCatalog); this._catalogCollection.Add(assemblyCatalog); } } this._partsQuery = this._catalogCollection.AsQueryable().SelectMany(catalog => catalog.Parts); }
/// <summary> /// Releases unmanaged and - optionally - managed resources /// </summary> /// <param name="disposing"><c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only unmanaged resources.</param> protected override void Dispose(bool disposing) { try { if (disposing) { if (!this._isDisposed) { bool disposeLock = false; ComposablePartCatalogCollection catalogs = null; try { using (new WriteLock(this._thisLock)) { if (!this._isDisposed) { disposeLock = true; catalogs = this._catalogCollection; this._catalogCollection = null; this._assemblyCatalogs = null; this._isDisposed = true; } } } finally { if (catalogs != null) { catalogs.Dispose(); } if (disposeLock) { this._thisLock.Dispose(); } } } } } finally { base.Dispose(disposing); } }
/// <summary> /// Initializes a new instance of the <see cref="AggregateCatalog"/> class /// with the specified catalogs. /// </summary> /// <param name="catalogs"> /// An <see cref="IEnumerable{T}"/> of <see cref="ComposablePartCatalog"/> objects to add /// to the <see cref="AggregateCatalog"/>; or <see langword="null"/> to /// create an <see cref="AggregateCatalog"/> that is empty. /// </param> /// <exception cref="ArgumentException"> /// <paramref name="catalogs"/> contains an element that is <see langword="null"/>. /// </exception> public AggregateCatalog(IEnumerable<ComposablePartCatalog> catalogs) { Requires.NullOrNotNullElements(catalogs, "catalogs"); this._catalogs = new ComposablePartCatalogCollection(catalogs, this.OnChanged, this.OnChanging); }