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);
        }