public void Initialize()
            {
                Reflector <NuPatternGlobalContainer> .GetProperty(x => NuPatternGlobalContainer.Instance).SetValue(
                    null,
                    new CompositionContainer(),
                    null);

                var catalog            = new TypeCatalog(typeof(Foo));
                var container          = new CompositionContainer(catalog);
                var compositionService = new NuPatternCompositionService(container);

                this.binding = new DynamicBinding <IFoo>(new DelegatingCompositionService(compositionService), "Foo");
            }
            public void WhenAddedExportExistsOnBase_ThenImportManyGetsBoth()
            {
                var catalog            = new TypeCatalog(typeof(Foo), typeof(Bar));
                var container          = new CompositionContainer(catalog);
                var compositionService = new NuPatternCompositionService(container);

                var binding = new DynamicBinding <IFoo>(new DelegatingCompositionService(compositionService), "Foo");

                Assert.True(binding.Evaluate());
                Assert.Equal(1, binding.Value.Bars.Count());

                using (var context = binding.CreateDynamicContext())
                {
                    var bar = new Bar();
                    context.AddExport <IBar>(bar);
                    var result = binding.Evaluate(context);

                    Assert.True(result);
                    Assert.Equal(2, binding.Value.Bars.Count());
                }
            }
        private INuPatternCompositionService CreateCompositionService(IGuidanceExtension extension, string extensionId)
        {
            var extensionContainer = new CompositionContainer(extensionsGlobalContainer);

            // Expose IGuidanceExtension to the container
            extensionContainer.ComposeExportedValue(extension);
            extensionContainer.ComposeExportedValue(InstalledGuidanceExtensions.First(r => r.ExtensionId == extensionId));

            extensionContainer.ComposeExportedValue <ExportProvider>(extensionContainer);

            var compositionService = new NuPatternCompositionService(extensionContainer);

            // Expose IGuidanceExtensionCompositionService to the container
            extensionContainer.ComposeExportedValue <INuPatternCompositionService>(compositionService);

            // Satisfy imports at this level, so that the right guidance extension-level stuff is injected instead
            // (i.e. the guidance extension might have specified an import of the IGudianceExtensionCompositionService and
            // would have gotten the global one.
            compositionService.SatisfyImportsOnce(extension);

            return(compositionService);
        }
            public void WhenAddedExportExistsOnBase_ThenOverridesIt()
            {
                var catalog = new TypeCatalog(typeof(Foo), typeof(Bar));
                var container = new CompositionContainer(catalog);
                var compositionService = new NuPatternCompositionService(container);

                var binding = new DynamicBinding<IFoo>(new DelegatingCompositionService(compositionService), "Foo");
                Assert.True(binding.Evaluate());
                Assert.NotNull(binding.Value.Bar);

                using (var context = binding.CreateDynamicContext())
                {
                    var bar = new Bar();
                    context.AddExport<IBar>(bar);
                    var result = binding.Evaluate(context);

                    Assert.True(result);
                    Assert.NotNull(binding.Value.Bar);
                    Assert.Same(bar, binding.Value.Bar);
                }
            }
            public void Initialize()
            {
                Reflector<NuPatternGlobalContainer>.GetProperty(x => NuPatternGlobalContainer.Instance).SetValue(
                    null,
                    new CompositionContainer(),
                    null);

                var catalog = new TypeCatalog(typeof(Foo));
                var container = new CompositionContainer(catalog);
                var compositionService = new NuPatternCompositionService(container);

                this.binding = new DynamicBinding<IFoo>(new DelegatingCompositionService(compositionService), "Foo");
            }
        private INuPatternCompositionService CreateCompositionService(IGuidanceExtension extension, string extensionId)
        {
            var extensionContainer = new CompositionContainer(extensionsGlobalContainer);

            // Expose IGuidanceExtension to the container
            extensionContainer.ComposeExportedValue(extension);
            extensionContainer.ComposeExportedValue(InstalledGuidanceExtensions.First(r => r.ExtensionId == extensionId));

            extensionContainer.ComposeExportedValue<ExportProvider>(extensionContainer);

            var compositionService = new NuPatternCompositionService(extensionContainer);
            // Expose IGuidanceExtensionCompositionService to the container
            extensionContainer.ComposeExportedValue<INuPatternCompositionService>(compositionService);

            // Satisfy imports at this level, so that the right guidance extension-level stuff is injected instead 
            // (i.e. the guidance extension might have specified an import of the IGudianceExtensionCompositionService and 
            // would have gotten the global one.
            compositionService.SatisfyImportsOnce(extension);

            return compositionService;
        }