Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'mcs/class/System.ComponentModel.Composition/src/Composition.Initialization/System')
-rw-r--r--mcs/class/System.ComponentModel.Composition/src/Composition.Initialization/System/ComponentModel/Composition/.gitattributes5
-rw-r--r--mcs/class/System.ComponentModel.Composition/src/Composition.Initialization/System/ComponentModel/Composition/CompositionInitializer.AssemblyList.cs36
-rw-r--r--mcs/class/System.ComponentModel.Composition/src/Composition.Initialization/System/ComponentModel/Composition/CompositionInitializer.cs104
-rw-r--r--mcs/class/System.ComponentModel.Composition/src/Composition.Initialization/System/ComponentModel/Composition/ExportFactoryOfT.cs30
-rw-r--r--mcs/class/System.ComponentModel.Composition/src/Composition.Initialization/System/ComponentModel/Composition/ExportFactoryOfTTMetadata.cs25
-rw-r--r--mcs/class/System.ComponentModel.Composition/src/Composition.Initialization/System/ComponentModel/Composition/ExportLifetimeContextOfT.cs38
-rw-r--r--mcs/class/System.ComponentModel.Composition/src/Composition.Initialization/System/ComponentModel/Composition/Hosting/.gitattributes3
-rw-r--r--mcs/class/System.ComponentModel.Composition/src/Composition.Initialization/System/ComponentModel/Composition/Hosting/CompositionHost.cs113
-rw-r--r--mcs/class/System.ComponentModel.Composition/src/Composition.Initialization/System/ComponentModel/Composition/Hosting/DeploymentCatalog.cs420
-rw-r--r--mcs/class/System.ComponentModel.Composition/src/Composition.Initialization/System/ComponentModel/Composition/Hosting/Package.cs113
10 files changed, 0 insertions, 887 deletions
diff --git a/mcs/class/System.ComponentModel.Composition/src/Composition.Initialization/System/ComponentModel/Composition/.gitattributes b/mcs/class/System.ComponentModel.Composition/src/Composition.Initialization/System/ComponentModel/Composition/.gitattributes
deleted file mode 100644
index af342c37220..00000000000
--- a/mcs/class/System.ComponentModel.Composition/src/Composition.Initialization/System/ComponentModel/Composition/.gitattributes
+++ /dev/null
@@ -1,5 +0,0 @@
-/CompositionInitializer.AssemblyList.cs -crlf
-/CompositionInitializer.cs -crlf
-/ExportFactoryOfT.cs -crlf
-/ExportFactoryOfTTMetadata.cs -crlf
-/ExportLifetimeContextOfT.cs -crlf
diff --git a/mcs/class/System.ComponentModel.Composition/src/Composition.Initialization/System/ComponentModel/Composition/CompositionInitializer.AssemblyList.cs b/mcs/class/System.ComponentModel.Composition/src/Composition.Initialization/System/ComponentModel/Composition/CompositionInitializer.AssemblyList.cs
deleted file mode 100644
index 6e8347208b7..00000000000
--- a/mcs/class/System.ComponentModel.Composition/src/Composition.Initialization/System/ComponentModel/Composition/CompositionInitializer.AssemblyList.cs
+++ /dev/null
@@ -1,36 +0,0 @@
-// -----------------------------------------------------------------------
-// Copyright (c) Microsoft Corporation. All rights reserved.
-// -----------------------------------------------------------------------
-using System;
-using System.Collections.Generic;
-using System.Reflection;
-using System.Windows;
-using System.Windows.Resources;
-
-namespace System.ComponentModel.Composition
-{
- public static partial class CompositionInitializer
- {
- // This method is the only Silverlight specific code dependency in CompositionHost
- private static List<Assembly> GetAssemblyList()
- {
- var assemblies = new List<Assembly>();
-
- // While this may seem like somewhat of a hack, walking the AssemblyParts in the active
- // deployment object is the only way to get the list of assemblies loaded by the XAP.
- foreach (AssemblyPart ap in Deployment.Current.Parts)
- {
- StreamResourceInfo sri = Application.GetResourceStream(new Uri(ap.Source, UriKind.Relative));
- if (sri != null)
- {
- // Keep in mind that calling Load on an assembly that is already loaded will
- // be a no-op and simply return the already loaded assembly object.
- Assembly assembly = ap.Load(sri.Stream);
- assemblies.Add(assembly);
- }
- }
-
- return assemblies;
- }
- }
-} \ No newline at end of file
diff --git a/mcs/class/System.ComponentModel.Composition/src/Composition.Initialization/System/ComponentModel/Composition/CompositionInitializer.cs b/mcs/class/System.ComponentModel.Composition/src/Composition.Initialization/System/ComponentModel/Composition/CompositionInitializer.cs
deleted file mode 100644
index 1416b6e82bb..00000000000
--- a/mcs/class/System.ComponentModel.Composition/src/Composition.Initialization/System/ComponentModel/Composition/CompositionInitializer.cs
+++ /dev/null
@@ -1,104 +0,0 @@
-// -----------------------------------------------------------------------
-// Copyright (c) Microsoft Corporation. All rights reserved.
-// -----------------------------------------------------------------------
-using System;
-using System.ComponentModel.Composition.Hosting;
-using System.ComponentModel.Composition.Primitives;
-using System.Globalization;
-using System.Linq;
-using System.Reflection;
-
-namespace System.ComponentModel.Composition
-{
- public static partial class CompositionInitializer
- {
- /// <summary>
- /// Will satisfy the imports on a object instance based on a <see cref="CompositionContainer"/>
- /// registered with the <see cref="CompositionHost"/>. By default if no <see cref="CompositionContainer"/>
- /// is registered the first time this is called it will be initialized to a catalog
- /// that contains all the assemblies loaded by the initial application XAP.
- /// </summary>
- /// <param name="attributedPart">
- /// Object instance that contains <see cref="ImportAttribute"/>s that need to be satisfied.
- /// </param>
- /// <exception cref="ArgumentNullException">
- /// <paramref name="instance"/> is <see langword="null"/>.
- /// </exception>
- /// <exception cref="ArgumentException">
- /// <paramref name="instance"/> contains <see cref="ExportAttribute"/>s applied on its type.
- /// </exception>
- /// <exception cref="ChangeRejectedException">
- /// One or more of the imports on the object instance could not be satisfied.
- /// </exception>
- /// <exception cref="CompositionException">
- /// One or more of the imports on the object instance caused an error while composing.
- /// </exception>
- public static void SatisfyImports(object attributedPart)
- {
- if (attributedPart == null)
- {
- throw new ArgumentNullException("attributedPart");
- }
- ComposablePart part = AttributedModelServices.CreatePart(attributedPart);
- CompositionInitializer.SatisfyImports(part);
- }
-
-
- /// <summary>
- /// Will satisfy the imports on a part based on a <see cref="CompositionContainer"/>
- /// registered with the <see cref="CompositionHost"/>. By default if no <see cref="CompositionContainer"/>
- /// is registered the first time this is called it will be initialized to a catalog
- /// that contains all the assemblies loaded by the initial application XAP.
- /// </summary>
- /// <param name="part">
- /// Part with imports that need to be satisfied.
- /// </param>
- /// <exception cref="ArgumentNullException">
- /// <paramref name="instance"/> is <see langword="null"/>.
- /// </exception>
- /// <exception cref="ArgumentException">
- /// <paramref name="instance"/> contains <see cref="ExportAttribute"/>s applied on its type.
- /// </exception>
- /// <exception cref="ChangeRejectedException">
- /// One or more of the imports on the object instance could not be satisfied.
- /// </exception>
- /// <exception cref="CompositionException">
- /// One or more of the imports on the object instance caused an error while composing.
- /// </exception>
- public static void SatisfyImports(ComposablePart part)
- {
- if (part == null)
- {
- throw new ArgumentNullException("part");
- }
-
- var batch = new CompositionBatch();
-
- batch.AddPart(part);
-
- if (part.ExportDefinitions.Any())
- {
- throw new ArgumentException(string.Format(CultureInfo.CurrentCulture,
- Strings.ArgumentException_TypeHasExports, part.ToString()), "part");
- }
-
- CompositionContainer container = null;
-
- // Ignoring return value because we don't need to know if we created it or not
- CompositionHost.TryGetOrCreateContainer(_createContainer, out container);
-
- container.Compose(batch);
- }
-
- private static Func<CompositionContainer> _createContainer = CreateCompositionContainer;
- private static CompositionContainer CreateCompositionContainer()
- {
- var assemblyCatalogs = GetAssemblyList()
- .Select<Assembly, ComposablePartCatalog>(assembly => new AssemblyCatalog(assembly));
-
- var aggCatalog = new AggregateCatalog(assemblyCatalogs);
-
- return new CompositionContainer(aggCatalog);
- }
- }
-} \ No newline at end of file
diff --git a/mcs/class/System.ComponentModel.Composition/src/Composition.Initialization/System/ComponentModel/Composition/ExportFactoryOfT.cs b/mcs/class/System.ComponentModel.Composition/src/Composition.Initialization/System/ComponentModel/Composition/ExportFactoryOfT.cs
deleted file mode 100644
index 1ee66281ff9..00000000000
--- a/mcs/class/System.ComponentModel.Composition/src/Composition.Initialization/System/ComponentModel/Composition/ExportFactoryOfT.cs
+++ /dev/null
@@ -1,30 +0,0 @@
-// -----------------------------------------------------------------------
-// Copyright (c) Microsoft Corporation. All rights reserved.
-// -----------------------------------------------------------------------
-using System;
-using Microsoft.Internal;
-using System.ComponentModel.Composition.Primitives;
-
-namespace System.ComponentModel.Composition
-{
- public class ExportFactory<T>
- {
- private Func<Tuple<T, Action>> _exportLifetimeContextCreator;
-
- public ExportFactory(Func<Tuple<T, Action>> exportLifetimeContextCreator)
- {
- if (exportLifetimeContextCreator == null)
- {
- throw new ArgumentNullException("exportLifetimeContextCreator");
- }
-
- this._exportLifetimeContextCreator = exportLifetimeContextCreator;
- }
-
- public ExportLifetimeContext<T> CreateExport()
- {
- Tuple<T, Action> untypedLifetimeContext = this._exportLifetimeContextCreator.Invoke();
- return new ExportLifetimeContext<T>(untypedLifetimeContext.Item1, untypedLifetimeContext.Item2);
- }
- }
-}
diff --git a/mcs/class/System.ComponentModel.Composition/src/Composition.Initialization/System/ComponentModel/Composition/ExportFactoryOfTTMetadata.cs b/mcs/class/System.ComponentModel.Composition/src/Composition.Initialization/System/ComponentModel/Composition/ExportFactoryOfTTMetadata.cs
deleted file mode 100644
index feb4097a64a..00000000000
--- a/mcs/class/System.ComponentModel.Composition/src/Composition.Initialization/System/ComponentModel/Composition/ExportFactoryOfTTMetadata.cs
+++ /dev/null
@@ -1,25 +0,0 @@
-// -----------------------------------------------------------------------
-// Copyright (c) Microsoft Corporation. All rights reserved.
-// -----------------------------------------------------------------------
-using System;
-using System.ComponentModel.Composition.Primitives;
-
-namespace System.ComponentModel.Composition
-{
- public class ExportFactory<T, TMetadata> : ExportFactory<T>
- {
- private readonly TMetadata _metadata;
-
- public ExportFactory(Func<Tuple<T, Action>> exportLifetimeContextCreator, TMetadata metadata)
- : base(exportLifetimeContextCreator)
- {
- this._metadata = metadata;
- }
-
- public TMetadata Metadata
- {
- get { return this._metadata; }
- }
- }
-}
-
diff --git a/mcs/class/System.ComponentModel.Composition/src/Composition.Initialization/System/ComponentModel/Composition/ExportLifetimeContextOfT.cs b/mcs/class/System.ComponentModel.Composition/src/Composition.Initialization/System/ComponentModel/Composition/ExportLifetimeContextOfT.cs
deleted file mode 100644
index f1182da5fd3..00000000000
--- a/mcs/class/System.ComponentModel.Composition/src/Composition.Initialization/System/ComponentModel/Composition/ExportLifetimeContextOfT.cs
+++ /dev/null
@@ -1,38 +0,0 @@
-// -----------------------------------------------------------------------
-// Copyright (c) Microsoft Corporation. All rights reserved.
-// -----------------------------------------------------------------------
-using System;
-using System.ComponentModel.Composition.Primitives;
-using System.Linq;
-
-namespace System.ComponentModel.Composition
-{
- public sealed class ExportLifetimeContext<T> : IDisposable
- {
- private readonly T _value;
- private readonly Action _disposeAction;
-
- public ExportLifetimeContext(T value, Action disposeAction)
- {
- this._value = value;
- this._disposeAction = disposeAction;
- }
-
- public T Value
- {
- get
- {
- return this._value;
- }
- }
-
- public void Dispose()
- {
- if (this._disposeAction != null)
- {
- this._disposeAction.Invoke();
- }
- }
- }
-}
-
diff --git a/mcs/class/System.ComponentModel.Composition/src/Composition.Initialization/System/ComponentModel/Composition/Hosting/.gitattributes b/mcs/class/System.ComponentModel.Composition/src/Composition.Initialization/System/ComponentModel/Composition/Hosting/.gitattributes
deleted file mode 100644
index 2dacd9d3491..00000000000
--- a/mcs/class/System.ComponentModel.Composition/src/Composition.Initialization/System/ComponentModel/Composition/Hosting/.gitattributes
+++ /dev/null
@@ -1,3 +0,0 @@
-/CompositionHost.cs -crlf
-/DeploymentCatalog.cs -crlf
-/Package.cs -crlf
diff --git a/mcs/class/System.ComponentModel.Composition/src/Composition.Initialization/System/ComponentModel/Composition/Hosting/CompositionHost.cs b/mcs/class/System.ComponentModel.Composition/src/Composition.Initialization/System/ComponentModel/Composition/Hosting/CompositionHost.cs
deleted file mode 100644
index 33d65fd6499..00000000000
--- a/mcs/class/System.ComponentModel.Composition/src/Composition.Initialization/System/ComponentModel/Composition/Hosting/CompositionHost.cs
+++ /dev/null
@@ -1,113 +0,0 @@
-// -----------------------------------------------------------------------
-// Copyright (c) Microsoft Corporation. All rights reserved.
-// -----------------------------------------------------------------------
-using System;
-using System.Globalization;
-using System.Threading;
-using System.ComponentModel.Composition.Primitives;
-namespace System.ComponentModel.Composition.Hosting
-{
- public static class CompositionHost
- {
- // Field is internal only to assist in testing
- internal static CompositionContainer _container = null;
- private static object _lockObject = new object();
-
- /// <summary>
- /// This method can be used to initialize the global container used by <see cref="CompositionInitializer.SatisfyImports(object)"/>
- /// in case where the default container doesn't provide enough flexibility.
- ///
- /// If this method is needed it should be called exactly once and as early as possible in the application host. It will need
- /// to be called before the first call to <see cref="CompositionInitializer.SatisfyImports(object)"/>
- /// </summary>
- /// <param name="container">
- /// <see cref="CompositionContainer"/> that should be used instead of the default global container.
- /// </param>
- /// <exception cref="ArgumentNullException">
- /// <paramref name="container"/> is <see langword="null"/>.
- /// </exception>
- /// <exception cref="InvalidOperationException">
- /// Either <see cref="Initialize(CompositionContainer)" /> or <see cref="Initialize(ComposablePartCatalog[])" /> has already been called or someone has already made use of the global
- /// container via <see cref="CompositionInitializer.SatisfyImports(object)"/>. In either case you need to ensure that it
- /// is called only once and that it is called early in the application host startup code.
- /// </exception>
- public static void Initialize(CompositionContainer container)
- {
- if (container == null)
- {
- throw new ArgumentNullException("container");
- }
-
- CompositionContainer globalContainer = null;
- bool alreadyCreated = TryGetOrCreateContainer(() => container, out globalContainer);
-
- if (alreadyCreated)
- {
- throw new InvalidOperationException(String.Format(CultureInfo.CurrentCulture,
- Strings.InvalidOperationException_GlobalContainerAlreadyInitialized));
- }
- }
-
- /// <summary>
- /// This method can be used to initialize the global container used by <see cref="CompositionInitializer.SatisfyImports(object)"/>
- /// in case where the default container doesn't provide enough flexibility.
- ///
- /// If this method is needed it should be called exactly once and as early as possible in the application host. It will need
- /// to be called before the first call to <see cref="CompositionInitializer.SatisfyImports(object)"/>
- /// </summary>
- /// <param name="catalogs">
- /// An array of <see cref="ComposablePartCatalog"/> that should be used to initialize the <see cref="CompositionContainer"/> with.
- /// </param>
- /// <exception cref="ArgumentNullException">
- /// <paramref name="catalogs"/> is <see langword="null"/>.
- /// </exception>
- /// <exception cref="InvalidOperationException">
- /// Either <see cref="Initialize(CompositionContainer)" /> or <see cref="Initialize(ComposablePartCatalog[])" />has already been called or someone has already made use of the global
- /// container via <see cref="CompositionInitializer.SatisfyImports(object)"/>. In either case you need to ensure that it
- /// is called only once and that it is called early in the application host startup code.
- /// </exception>
- public static CompositionContainer Initialize(params ComposablePartCatalog[] catalogs)
- {
- AggregateCatalog aggregateCatalog = new AggregateCatalog(catalogs);
- CompositionContainer container = new CompositionContainer(aggregateCatalog);
- try
- {
- CompositionHost.Initialize(container);
- }
- catch
- {
- container.Dispose();
-
- // NOTE : this is important, as this prevents the disposal of the catalogs passed as input arguments
- aggregateCatalog.Catalogs.Clear();
- aggregateCatalog.Dispose();
-
- throw;
- }
-
- return container;
- }
-
-
-
- internal static bool TryGetOrCreateContainer(Func<CompositionContainer> createContainer, out CompositionContainer globalContainer)
- {
- bool alreadyCreated = true;
- if (_container == null)
- {
- var container = createContainer.Invoke();
- lock (_lockObject)
- {
- if (_container == null)
- {
- Thread.MemoryBarrier();
- _container = container;
- alreadyCreated = false;
- }
- }
- }
- globalContainer = _container;
- return alreadyCreated;
- }
- }
-} \ No newline at end of file
diff --git a/mcs/class/System.ComponentModel.Composition/src/Composition.Initialization/System/ComponentModel/Composition/Hosting/DeploymentCatalog.cs b/mcs/class/System.ComponentModel.Composition/src/Composition.Initialization/System/ComponentModel/Composition/Hosting/DeploymentCatalog.cs
deleted file mode 100644
index e6042b1caa1..00000000000
--- a/mcs/class/System.ComponentModel.Composition/src/Composition.Initialization/System/ComponentModel/Composition/Hosting/DeploymentCatalog.cs
+++ /dev/null
@@ -1,420 +0,0 @@
-// -----------------------------------------------------------------------
-// Copyright (c) Microsoft Corporation. All rights reserved.
-// -----------------------------------------------------------------------
-using System;
-using System.Collections.Generic;
-using System.ComponentModel.Composition.Primitives;
-using System.Linq;
-using System.Net;
-using System.Reflection;
-using System.Threading;
-using Microsoft.Internal;
-
-#if (SILVERLIGHT)
-namespace System.ComponentModel.Composition.Hosting
-{
- /// <summary>
- /// Implements a MEF catalog that supports Asynchronous download of Silverlast Xap files.
- /// </summary>
- public class DeploymentCatalog : ComposablePartCatalog, INotifyComposablePartCatalogChanged
- {
- static class State
- {
- public const int Created = 0;
- public const int Initialized = 1000;
- public const int DownloadStarted = 2000;
- public const int DownloadCompleted = 3000;
- public const int DownloadCancelled = 4000;
- }
-
- private Lock _lock = new Lock();
- private volatile bool _isDisposed = false;
- private Uri _uri = null;
- private int _state = State.Created;
- private AggregateCatalog _catalogCollection = new AggregateCatalog();
- private WebClient _webClient = null;
-
- /// <summary>
- /// Construct a Deployment catalog with the parts from the main Xap.
- /// </summary>
- public DeploymentCatalog()
- {
- this.DiscoverParts(Package.CurrentAssemblies);
- this._state = State.Initialized;
- }
-
- /// <summary>
- /// Construct a Deployment catalog with a string form relative uri.
- /// </summary>
- /// <value>
- /// A relative Uri to the Download Xap file
- /// <see cref="DeploymentCatalog"/>.
- /// </value>
- /// <exception cref="ArgumentException">
- /// The argument is null or an empty string.
- /// </exception>
- public DeploymentCatalog(string uriRelative)
- {
- Requires.NotNullOrEmpty(uriRelative, "uriRelative");
- this._uri = new Uri(uriRelative, UriKind.Relative);
- }
-
- /// <summary>
- /// Construct a Deployment catalog with the parts from uri.
- /// </summary>
- /// <value>
- /// A Uri to the Download Xap file
- /// <see cref="System.Uri"/>.
- /// </value>
- /// <exception cref="ArgumentException">
- /// The argument is null.
- /// </exception>
- public DeploymentCatalog(Uri uri)
- {
- Requires.NotNull<Uri>(uri, "uri");
- this._uri = uri;
- }
-
- /// <summary>
- /// Notify when the contents of the Catalog has changed.
- /// </summary>
- public event EventHandler<ComposablePartCatalogChangeEventArgs> Changed;
-
- /// <summary>
- /// Notify when the contents of the Catalog is changing.
- /// </summary>
- public event EventHandler<ComposablePartCatalogChangeEventArgs> Changing;
-
- /// <summary>
- /// Notify when the download has been completed.
- /// </summary>
- public event EventHandler<AsyncCompletedEventArgs> DownloadCompleted;
-
- /// <summary>
- /// Notify when the contents of the Progress of the download has changed.
- /// </summary>
- public event EventHandler<DownloadProgressChangedEventArgs> DownloadProgressChanged;
-
- /// <summary>
- /// Retrieve or create the WebClient.
- /// </summary>
- /// <exception cref="ObjectDisposedException">
- /// The <see cref="DeploymentCatalog"/> has been disposed of.
- /// </exception>
- private WebClient WebClient
- {
- get
- {
- this.ThrowIfDisposed();
- if(this._webClient == null)
- {
- Interlocked.CompareExchange<WebClient>(ref this._webClient, new WebClient(), null);
- }
- return this._webClient;
- }
- }
-
- /// <summary>
- /// Gets the part definitions of the Deployment catalog.
- /// </summary>
- /// <value>
- /// A <see cref="IQueryable{T}"/> of <see cref="ComposablePartDefinition"/> objects of the
- /// <see cref="DeploymentCatalog"/>.
- /// </value>
- /// <exception cref="ObjectDisposedException">
- /// The <see cref="DeploymentCatalog"/> has been disposed of.
- /// </exception>
- public override IQueryable<ComposablePartDefinition> Parts
- {
- get
- {
- this.ThrowIfDisposed();
- return this._catalogCollection.Parts;
- }
- }
-
- /// <summary>
- /// Gets the Uri of this catalog
- /// </summary>
- /// <exception cref="ObjectDisposedException">
- /// The <see cref="DeploymentCatalog"/> has been disposed of.
- /// </exception>
- public Uri Uri
- {
- get
- {
- this.ThrowIfDisposed();
- return this._uri;
- }
- }
-
- /// <summary>
- /// </summary>
- /// <param name="assemblies">
- /// </param>
- /// <exception cref="ObjectDisposedException">
- /// The <see cref="DeploymentCatalog"/> has been disposed of.
- /// </exception>
- private void DiscoverParts(IEnumerable<Assembly> assemblies)
- {
- this.ThrowIfDisposed();
-
- var addedDefinitions = new List<ComposablePartDefinition>();
- var addedCatalogs = new Dictionary<string, ComposablePartCatalog>();
- using(new ReadLock(this._lock))
- {
- foreach (var assembly in assemblies)
- {
- if (addedCatalogs.ContainsKey(assembly.FullName))
- {
- // Nothing to do because the assembly has already been added.
- continue;
- }
-
- var catalog = new AssemblyCatalog(assembly);
- addedDefinitions.AddRange(catalog.Parts);
- addedCatalogs.Add(assembly.FullName, catalog);
- }
- }
-
- // Generate notifications
- using (var atomicComposition = new AtomicComposition())
- {
- var changingArgs = new ComposablePartCatalogChangeEventArgs(addedDefinitions, Enumerable.Empty<ComposablePartDefinition>(), atomicComposition);
- this.OnChanging(changingArgs);
-
- using (new WriteLock(this._lock))
- {
- foreach (var item in addedCatalogs)
- {
- this._catalogCollection.Catalogs.Add(item.Value);
- }
- }
- atomicComposition.Complete();
- }
-
- var changedArgs = new ComposablePartCatalogChangeEventArgs(addedDefinitions, Enumerable.Empty<ComposablePartDefinition>(), null);
- this.OnChanged(changedArgs);
- }
-
- /// <summary>
- /// Returns the export definitions that match the constraint defined by the specified definition.
- /// </summary>
- /// <param name="definition">
- /// The <see cref="ImportDefinition"/> that defines the conditions of the
- /// <see cref="ExportDefinition"/> objects to return.
- /// </param>
- /// <returns>
- /// An <see cref="IEnumerable{T}"/> of <see cref="Tuple{T1, T2}"/> containing the
- /// <see cref="ExportDefinition"/> objects and their associated
- /// <see cref="ComposablePartDefinition"/> for objects that match the constraint defined
- /// by <paramref name="definition"/>.
- /// </returns>
- /// <exception cref="ArgumentNullException">
- /// <paramref name="definition"/> is <see langword="null"/>.
- /// </exception>
- /// <exception cref="ObjectDisposedException">
- /// The <see cref="DeploymentCatalog"/> has been disposed of.
- /// </exception>
- public override IEnumerable<Tuple<ComposablePartDefinition, ExportDefinition>> GetExports(ImportDefinition definition)
- {
- this.ThrowIfDisposed();
- Requires.NotNull(definition, "definition");
-
- return this._catalogCollection.GetExports(definition);
- }
-
- /// <summary>
- /// Cancel the async operation.
- /// </summary>
- public void CancelAsync()
- {
- ThrowIfDisposed();
- MutateStateOrThrow(State.DownloadCancelled, State.DownloadStarted);
- this.WebClient.CancelAsync();
- }
-
- /// <summary>
- /// Begin the asynchronous download.
- /// </summary>
- public void DownloadAsync()
- {
- ThrowIfDisposed();
-
- if (Interlocked.CompareExchange(ref this._state, State.DownloadStarted, State.Created) == State.Created)
- {
- // Created with Downloadable content do download
- this.WebClient.OpenReadCompleted += new OpenReadCompletedEventHandler(HandleOpenReadCompleted);
- this.WebClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(HandleDownloadProgressChanged);
- this.WebClient.OpenReadAsync(Uri, this);
- }
- else
- {
- // Created with LocalAssemblies
- MutateStateOrThrow(State.DownloadCompleted, State.Initialized);
-
- this.OnDownloadCompleted(new AsyncCompletedEventArgs(null, false, this));
- }
- }
-
- void HandleDownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
- {
- EventHandler<DownloadProgressChangedEventArgs> downloadProgressChangedEvent = this.DownloadProgressChanged;
- if (downloadProgressChangedEvent != null)
- {
- downloadProgressChangedEvent(this, e);
- }
- }
-
- private void HandleOpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
- {
- Exception error = e.Error;
- bool cancelled = e.Cancelled;
-
- // Possible valid current states are DownloadStarted and DownloadCancelled.
- int currentState = Interlocked.CompareExchange(ref this._state, State.DownloadCompleted, State.DownloadStarted);
-
- if (currentState != State.DownloadStarted)
- {
- cancelled = true;
- }
-
- if (error == null && !cancelled)
- {
- try
- {
- var assemblies = Package.LoadPackagedAssemblies(e.Result);
- this.DiscoverParts(assemblies);
- }
- catch (Exception ex)
- {
- error = new InvalidOperationException(Strings.InvalidOperationException_ErrorReadingXap, ex);
- }
- }
-
- this.OnDownloadCompleted(new AsyncCompletedEventArgs(error, cancelled, this));
- }
-
- /// <summary>
- /// Raises the <see cref="INotifyComposablePartCatalogChanged.Changed"/> event.
- /// </summary>
- /// <param name="e">
- /// An <see cref="ComposablePartCatalogChangeEventArgs"/> containing the data for the event.
- /// </param>
- protected virtual void OnChanged(ComposablePartCatalogChangeEventArgs e)
- {
- EventHandler<ComposablePartCatalogChangeEventArgs> changedEvent = this.Changed;
- if (changedEvent != null)
- {
- changedEvent(this, e);
- }
- }
-
- /// <summary>
- /// Raises the <see cref="INotifyComposablePartCatalogChanged.Changing"/> event.
- /// </summary>
- /// <param name="e">
- /// An <see cref="ComposablePartCatalogChangeEventArgs"/> containing the data for the event.
- /// </param>
- protected virtual void OnChanging(ComposablePartCatalogChangeEventArgs e)
- {
- EventHandler<ComposablePartCatalogChangeEventArgs> changingEvent = this.Changing;
- if (changingEvent != null)
- {
- changingEvent(this, e);
- }
- }
-
- /// <summary>
- /// Raises the <see cref="DownloadCompleted"/> event.
- /// </summary>
- /// <param name="e">
- /// An <see cref="AsyncCompletedEventArgs"/> containing the data for the event.
- /// </param>
- protected virtual void OnDownloadCompleted(AsyncCompletedEventArgs e)
- {
- EventHandler<AsyncCompletedEventArgs> downloadCompletedEvent = this.DownloadCompleted;
- if (downloadCompletedEvent != null)
- {
- downloadCompletedEvent(this, e);
- }
- }
-
- /// <summary>
- /// Raises the <see cref="DownloadProgressChanged"/> event.
- /// </summary>
- /// <param name="e">
- /// An <see cref="ProgressChangedEventArgs"/> containing the data for the event.
- /// </param>
- protected virtual void OnDownloadProgressChanged(DownloadProgressChangedEventArgs e)
- {
- EventHandler<DownloadProgressChangedEventArgs> downloadProgressChangedEvent = this.DownloadProgressChanged;
- if (downloadProgressChangedEvent != null)
- {
- downloadProgressChangedEvent(this, e);
- }
- }
-
- protected override void Dispose(bool disposing)
- {
- try
- {
- if (disposing)
- {
- if (!this._isDisposed)
- {
- AggregateCatalog catalogs = null;
- bool disposeLock = false;
- try
- {
- using (new WriteLock(this._lock))
- {
- if (!this._isDisposed)
- {
- disposeLock = true;
- catalogs = this._catalogCollection;
- this._catalogCollection = null;
- this._isDisposed = true;
- }
- }
- }
- finally
- {
- if (catalogs != null)
- {
- catalogs.Dispose();
- }
-
- if (disposeLock)
- {
- this._lock.Dispose();
- }
- }
- }
- }
- }
- finally
- {
- base.Dispose(disposing);
- }
- }
-
- private void ThrowIfDisposed()
- {
- if (this._isDisposed)
- {
- throw new ObjectDisposedException(this.GetType().ToString());
- }
- }
-
- private void MutateStateOrThrow(int toState, int fromState)
- {
- int currentState = Interlocked.CompareExchange(ref this._state, toState, fromState);
- if(currentState != fromState)
- {
- throw new InvalidOperationException(Strings.InvalidOperationException_DeploymentCatalogInvalidStateChange);
- }
- }
- }
-}
-#endif
diff --git a/mcs/class/System.ComponentModel.Composition/src/Composition.Initialization/System/ComponentModel/Composition/Hosting/Package.cs b/mcs/class/System.ComponentModel.Composition/src/Composition.Initialization/System/ComponentModel/Composition/Hosting/Package.cs
deleted file mode 100644
index a91e5945f05..00000000000
--- a/mcs/class/System.ComponentModel.Composition/src/Composition.Initialization/System/ComponentModel/Composition/Hosting/Package.cs
+++ /dev/null
@@ -1,113 +0,0 @@
-// -----------------------------------------------------------------------
-// Copyright (c) Microsoft Corporation. All rights reserved.
-// -----------------------------------------------------------------------
-#if(SILVERLIGHT)
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Net;
-using System.Reflection;
-using System.Windows;
-using System.Windows.Resources;
-using System.Xml;
-using System.ComponentModel;
-
-namespace System.ComponentModel.Composition.Hosting
-{
- /// <summary>
- /// Helper functions for accessing the Silverlight manifest
- /// </summary>
- internal static class Package
- {
- /// <summary>
- /// Retrieves The current list of assemblies for the application XAP load. Depends on the Deployment.Current property being setup and
- /// so can only be accessed after the Application object has be completely constructed.
- /// No caching occurs at this level.
- /// </summary>
- public static IEnumerable<Assembly> CurrentAssemblies
- {
- get
- {
- var assemblies = new List<Assembly>();
-
- // While this may seem like somewhat of a hack, walking the AssemblyParts in the active
- // deployment object is the only way to get the list of assemblies loaded by the initial XAP.
- foreach (AssemblyPart ap in Deployment.Current.Parts)
- {
- StreamResourceInfo sri = Application.GetResourceStream(new Uri(ap.Source, UriKind.Relative));
- if (sri != null)
- {
- // Keep in mind that calling Load on an assembly that is already loaded will
- // be a no-op and simply return the already loaded assembly object.
- Assembly assembly = ap.Load(sri.Stream);
- assemblies.Add(assembly);
- }
- }
-
- return assemblies;
- }
- }
-
-
- public static IEnumerable<Assembly> LoadPackagedAssemblies(Stream packageStream)
- {
- List<Assembly> assemblies = new List<Assembly>();
- StreamResourceInfo packageStreamInfo = new StreamResourceInfo(packageStream, null);
-
- IEnumerable<AssemblyPart> parts = GetDeploymentParts(packageStreamInfo);
-
- foreach (AssemblyPart ap in parts)
- {
- StreamResourceInfo sri = Application.GetResourceStream(
- packageStreamInfo, new Uri(ap.Source, UriKind.Relative));
-
- assemblies.Add(ap.Load(sri.Stream));
- }
- packageStream.Close();
- return assemblies;
- }
-
- /// <summary>
- /// Only reads AssemblyParts and does not support external parts (aka Platform Extensions or TPEs).
- /// </summary>
- private static IEnumerable<AssemblyPart> GetDeploymentParts(StreamResourceInfo xapStreamInfo)
- {
- Uri manifestUri = new Uri("AppManifest.xaml", UriKind.Relative);
- StreamResourceInfo manifestStreamInfo = Application.GetResourceStream(xapStreamInfo, manifestUri);
- List<AssemblyPart> assemblyParts = new List<AssemblyPart>();
-
- // The code assumes the following format in AppManifest.xaml
- //<Deployment ... >
- // <Deployment.Parts>
- // <AssemblyPart x:Name="A" Source="A.dll" />
- // <AssemblyPart x:Name="B" Source="B.dll" />
- // ...
- // <AssemblyPart x:Name="Z" Source="Z.dll" />
- // </Deployment.Parts>
- //</Deployment>
- if (manifestStreamInfo != null)
- {
- Stream manifestStream = manifestStreamInfo.Stream;
- using (XmlReader reader = XmlReader.Create(manifestStream))
- {
- if (reader.ReadToFollowing("AssemblyPart"))
- {
- do
- {
- string source = reader.GetAttribute("Source");
-
- if (source != null)
- {
- assemblyParts.Add(new AssemblyPart() { Source = source });
- }
- }
- while (reader.ReadToNextSibling("AssemblyPart"));
- }
- }
- }
-
- return assemblyParts;
- }
- }
-}
-#endif