/// <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); }
/// <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 (!_isDisposed) { bool disposeLock = false; ComposablePartCatalogCollection?catalogs = null; try { using (new WriteLock(_thisLock)) { if (!_isDisposed) { disposeLock = true; catalogs = _catalogCollection; _catalogCollection = null !; _assemblyCatalogs = null !; _isDisposed = true; } } } finally { if (catalogs != null) { catalogs.Dispose(); } if (disposeLock) { _thisLock.Dispose(); } } } } } finally { base.Dispose(disposing); } }
private void Initialize(string path, string searchPattern) { _path = path; _fullPath = GetFullPath(path); _searchPattern = searchPattern; _assemblyCatalogs = new Dictionary <string, AssemblyCatalog>(); _catalogCollection = new ComposablePartCatalogCollection(null, null, null); _loadedFiles = GetFiles().ToReadOnlyCollection(); foreach (string file in _loadedFiles) { AssemblyCatalog?assemblyCatalog = CreateAssemblyCatalogGuarded(file); if (assemblyCatalog != null) { _assemblyCatalogs.Add(file, assemblyCatalog); _catalogCollection.Add(assemblyCatalog); } } }
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> /// 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, nameof(catalogs)); _catalogs = new ComposablePartCatalogCollection(catalogs, OnChanged, OnChanging); }
/// <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); }