CodePaste Logo
New Snippet New Snippet Recent Snippets Recent Snippets My Snippets My Snippets Web Code Search Snippets Search
Sign inor Register
Language: C#

CompositionInitializer that does not hold on to parts by default

589 Views
Copy Code Show/Hide Line Numbers
using System;
using System.ComponentModel.Composition;
using System.ComponentModel.Composition.Primitives;
using System.ComponentModel.Composition.Hosting;
 
namespace Microsoft.ComponentModel.Composition
{
    public static class CompositionInitializerEx
    {
        public static void SatisfyImports(ComposablePart part, bool allowRecomposition = false)
        {
            var container = Hosting.CompositionHostEx.GetContainer();
            if (allowRecomposition)
                CompositionInitializer.SatisfyImports(part);
            else
                container.SatisfyImportsOnce(part);
        }
 
        public static void SatisfyImports(object attributedPart, bool allowRecomposition = false)
        {
            var container = Hosting.CompositionHostEx.GetContainer();
            if (allowRecomposition)
                CompositionInitializer.SatisfyImports(attributedPart);
            else
                container.SatisfyImportsOnce(attributedPart);
        }
 
    }
 
    namespace Hosting
    {
        public static class CompositionHostEx
        {
            private static CompositionContainer _container;
            internal static CompositionContainer GetContainer()
            {
                if (_container == null)
                {
                    throw new ArgumentNullException("Initialize has not been called on CompositionInitializer");
                }
                return _container;
            }
 
            public static void Initialize()
            {
                Initialize(new DeploymentCatalog());
            }
 
            public static void Initialize(CompositionContainer container)
            {
                CompositionHost.Initialize(container);
                _container = container;
            }
 
            public static void Initialize(params ComposablePartCatalog[] catalogs)
            {
                var catalog = new AggregateCatalog(catalogs);
                var container = new CompositionContainer(catalog);
                Initialize(container);
            }
        }
    }
}
by Glenn Block
  June 02, 2010 @ 10:29pm

by Joe Kowalski    February 09, 2011 @ 5:21pm

Juast a though: Did you mean to have:

if (_container == null)
{
Initialize();
}

Add a comment


Report Abuse
brought to you by:
West Wind Techologies



If you find this site useful and use it frequently please consider making a donation to support this free service.
Donate