private void ExportsChanged(object sender, ExportChangedEventArgs e) { var temp = new List<IExport>(); foreach (ExportMetadata exportMetadata in e.Removed.Where(exportMetadata => !temp.Contains(exportMetadata.Export))) { _exports.Remove(exportMetadata.Export); temp.Add(exportMetadata.Export); } temp.Clear(); foreach ( ExportMetadata exportMetadata in e.Added.Where(exportMetadata => !temp.Contains(exportMetadata.Export))) { var attr = exportMetadata.Export.ImplementType.GetCustomAttribute<ExportLevelAttribute>(); if(attr == null) attr = exportMetadata.Export.ImplementType.Assembly.GetCustomAttribute<ExportLevelAttribute>(); _exports.Register(exportMetadata.Export, attr == null ? 0 : attr.Level); temp.Add(exportMetadata.Export); } }
/// <summary> /// The on exports changed. /// </summary> /// <param name="e"> /// The e. /// </param> protected virtual void OnExportsChanged(ExportChangedEventArgs e) { Contract.Requires<ArgumentNullException>(e != null, "e"); EventHandler<ExportChangedEventArgs> handler = ExportsChanged; if (handler != null) handler(this, e); }