public void Implementation()
		{
			var types = new[] { typeof(Implemented) }.AsApplicationParts();
			var container = new ContainerConfiguration().WithParts( types.AsEnumerable() ).WithProvider( SingletonExportDescriptorProvider.Default ).CreateContainer();
			Assert.Same( Implemented.Default, container.GetExport<ISingleton>() );
			Assert.Same( Implemented.Default, container.GetExport<Implemented>() );
		}
		public void Basic()
		{
			var types = new[] { typeof(Singleton) }.AsApplicationParts();
			var container = new ContainerConfiguration().WithParts( types.AsEnumerable() ).WithProvider( SingletonExportDescriptorProvider.Default ).CreateContainer();
			var export = container.GetExport<Singleton>();
			Assert.Same( Singleton.Default, export );
		}
コード例 #3
0
        public void ProvidersCanDetectAbsenceOfAContractItSupports()
        {
            var container = new ContainerConfiguration()
                .WithProvider(new DefaultObjectExportDescriptorProvider())
                .CreateContainer();

            var o = container.GetExport<object>();
            Assert.Equal(DefaultObjectExportDescriptorProvider.DefaultObject, o);
        }
コード例 #4
0
        public void AConcreteTypeWithDictionaryConstructorIsAMetadataView()
        {
            var cc = new ContainerConfiguration()
                        .WithPart<HasNameA>()
                        .CreateContainer();

            var hn = cc.GetExport<Lazy<HasNameA, DictionaryName>>();

            Assert.Equal("A", hn.Metadata.RetrievedName);
        }
コード例 #5
0
        public void MetadataViewsCanCarryDefaultValues()
        {
            var cc = new ContainerConfiguration()
                        .WithPart<HasNoName>()
                        .CreateContainer();

            var hn = cc.GetExport<Lazy<HasNoName, OptionallyNamed>>();

            Assert.Equal("B", hn.Metadata.Name);
        }
コード例 #6
0
        public void AConcreteTypeWithWritablePropertiesIsAMetadataView()
        {
            var cc = new ContainerConfiguration()
                        .WithPart<HasNameA>()
                        .CreateContainer();

            var hn = cc.GetExport<Lazy<HasNameA, Named>>();

            Assert.Equal("A", hn.Metadata.Name);
        }
コード例 #7
0
        public void AConcreteTypeWithUnsupportedConstructorsCannotBeUsedAsAMetadataView()
        {
            var cc = new ContainerConfiguration()
                        .WithPart<HasNameA>()
                        .CreateContainer();

            var x = Assert.Throws<CompositionFailedException>(() => cc.GetExport<Lazy<HasNoName, InvalidConcreteView>>());

            Assert.Equal("The type 'InvalidConcreteView' cannot be used as a metadata view. A metadata view must be a concrete class with a parameterless or dictionary constructor.", x.Message);
        }
コード例 #8
0
        public void ProvidersCanLocateImplementationsOfAContractItSupports()
        {
            var container = new ContainerConfiguration()
                .WithProvider(new DefaultObjectExportDescriptorProvider())
                .WithPart<ExportsObject>()
                .CreateContainer();

            var o = container.GetExport<object>();
            Assert.NotEqual(DefaultObjectExportDescriptorProvider.DefaultObject, o);
        }
コード例 #9
0
        public override Action GetOperation()
        {
            var c = new ContainerConfiguration()
                .WithPart(typeof(X))
                .CreateContainer();

            return () =>
            {
                c.GetExport<X>();
            };
        }
コード例 #10
0
        protected void Application_Start()
        {
            SetupAutoMapper();
            var container = new ContainerConfiguration()
                                    .WithAssembly(typeof(WebApiApplication).Assembly)
                                    .CreateContainer();

            var resolver = new StandaloneDependencyResolver(container);
            GlobalConfiguration.Configuration.DependencyResolver = resolver;
            GlobalConfiguration.Configure(container.GetExport<WebApiConfig>().Register);
        }
コード例 #11
0
		public void Basic()
		{
			var parts = this.Adapt().WithNested().Append( typeof(Protected) ).AsApplicationParts();
			var builder = ConventionBuilderFactory.Default.Get();
			var container = new ContainerConfiguration().WithParts( parts.AsEnumerable(), builder ).WithProvider( ServicesExportDescriptorProvider.Default ).CreateContainer();
			new EnableServicesCommand().Execute();
			var dependency = container.GetExport<Dependency>();
			Assert.NotNull( dependency );

			var export = container.GetExport<IPrimary>();
			var primary = Assert.IsType<Primary>( export );
			Assert.Equal( 2, primary.Selected.GetParameters().Length );

			var exported = container.GetExport<Exported>();
			Assert.Equal( 3, exported.Selected.GetParameters().Length );

			var external = container.GetExport<ExternalDependencyExport>();
			Assert.Equal( 3, external.Selected.GetParameters().Length );

			Assert.Throws<CompositionFailedException>( () => container.GetExport<Protected>() );
		}
コード例 #12
0
        public void CreateContainer_ExportConventionsWithInheritedProperties_Success()
        {
            var conventions = new ConventionBuilder();

            conventions.ForType <DerivedFromBaseWithExport>()
            .ExportProperty(b => b.Exported);

            CompositionHost container = new ContainerConfiguration()
                                        .WithDefaultConventions(conventions)
                                        .WithParts(typeof(DerivedFromBaseWithExport))
                                        .CreateContainer();

            Assert.Equal("A", container.GetExport <string>());
        }
コード例 #13
0
        public void NotifyImportsSatisfiedAttributeAlreadyApplied_ShouldSucceed()
        {
            var builder = new ConventionBuilder();

            builder.ForType <OnImportsSatisfiedConfiguredClass>().NotifyImportsSatisfied(p => p.OnImportsSatisfied());
            var container = new ContainerConfiguration()
                            .WithPart <OnImportsSatisfiedConfiguredClass>(builder)
                            .WithPart <ExportValues>(builder)
                            .CreateContainer();
            var test = container.GetExport <OnImportsSatisfiedConfiguredClass>();

            Assert.NotNull(test.P1);
            Assert.NotNull(test.P2);
            Assert.Equal(1, test.OnImportsSatisfiedInvoked);
        }
コード例 #14
0
        public void NotifyImportsSatisfied_ShouldSucceed()
        {
            var builder = new ConventionBuilder();

            builder.ForType <OnImportsSatisfiedTestClass>().NotifyImportsSatisfied(p => p.OnImportsSatisfied());
            CompositionHost container = new ContainerConfiguration()
                                        .WithPart <OnImportsSatisfiedTestClass>(builder)
                                        .WithPart <ExportValues>(builder)
                                        .CreateContainer();
            OnImportsSatisfiedTestClass test = container.GetExport <OnImportsSatisfiedTestClass>();

            Assert.NotNull(test.P1);
            Assert.NotNull(test.P2);
            Assert.Equal(1, test.OnImportsSatisfiedInvoked);
        }
コード例 #15
0
        public override Action GetOperation()
        {
            var c = new ContainerConfiguration()
                .WithPart(typeof(X))
                .WithPart(typeof(XFactory))
                .CreateContainer();

            var xf = c.GetExport<XFactory>();
            return () =>
            {
                var x = xf.CreateX();
                var unused = x.Value;
                x.Dispose();
            };
        }
コード例 #16
0
        public void NotifyImportsSatisfiedPropertiesAndFields_ShouldSucceed()
        {
            var builder = new ConventionBuilder();

            builder.ForTypesMatching(t => true).NotifyImportsSatisfied(mi => mi.Name == "OnImportsSatisfied5" || mi.Name == "OnImportsSatisfied6");
            var container = new ContainerConfiguration()
                            .WithPart <OnImportsSatisfiedTestClassPropertiesAndFields>(builder)
                            .WithPart <ExportValues>(builder)
                            .CreateContainer();
            var test = container.GetExport <OnImportsSatisfiedTestClassPropertiesAndFields>();

            Assert.NotNull(test.P1);
            Assert.NotNull(test.P2);
            Assert.Equal(0, test.OnImportsSatisfiedInvoked);
        }
コード例 #17
0
        public void CreateContainer_OpenGenericTypes_Success()
        {
            var conventions = new ConventionBuilder();

            conventions.ForTypesDerivedFrom <IContainer>()
            .Export <IContainer>();
            conventions.ForTypesDerivedFrom(typeof(IRepository <>))
            .Export(t => t.AsContractType(typeof(IRepository <>)));

            CompositionHost container = new ContainerConfiguration()
                                        .WithParts(new Type[] { typeof(EFRepository <>), typeof(Container) }, conventions)
                                        .CreateContainer();

            Assert.Equal(0, container.GetExport <IRepository <int> >().Fetch());
        }
コード例 #18
0
        public void NotifyImportsSatisfiedAttributeAppliedToBaseClass_ShouldSucceed()
        {
            var builder = new ConventionBuilder();

            builder.ForTypesMatching(t => true).NotifyImportsSatisfied(mi => mi.Name == "OnImportsSatisfied");
            var container = new ContainerConfiguration()
                            .WithPart <OnImportsSatisfiedDerivedClass>(builder)
                            .WithPart <ExportValues>(builder)
                            .CreateContainer();
            var test = container.GetExport <OnImportsSatisfiedDerivedClass>();

            Assert.NotNull(test.P1);
            Assert.NotNull(test.P2);
            Assert.Equal(1, test.OnImportsSatisfiedInvoked);
        }
コード例 #19
0
        public void DictionaryImportsCompatibleWithConventionBuilder()
        {
            var rb = new ConventionBuilder();

            rb.ForType <ConventionConsumer>().Export();
            var container = new ContainerConfiguration()
                            .WithPart <ConventionConsumer>(rb)
                            .WithParts(typeof(ValueA), typeof(ValueB))
                            .WithProvider(new DictionaryExportDescriptorProvider())
                            .CreateContainer();

            var consumer = container.GetExport <ConventionConsumer>();

            Assert.Equal(2, consumer.Values.Count());
        }
コード例 #20
0
        public void DependenciesOfSharedPartsAreResolvedInTheGlobalScope()
        {
            var cc = new ContainerConfiguration()
                     .WithParts(typeof(GloballySharedWithDependency), typeof(A), typeof(DataConsistencyBoundaryProvider))
                     .CreateContainer();
            var s = cc.GetExport <DataConsistencyBoundaryProvider>().SharingScopeFactory.CreateExport();
            var g = s.Value.GetExport <GloballySharedWithDependency>();

            s.Dispose();
            var a = (A)g.A;

            Assert.False(a.IsDisposed);
            cc.Dispose();
            Assert.True(a.IsDisposed);
        }
コード例 #21
0
        public void NotifyImportsSatisfiedTwice_ShouldSucceed()
        {
            var builder = new ConventionBuilder();

            builder.ForTypesMatching(t => true).NotifyImportsSatisfied(mi => mi.Name == "OnImportsSatisfied1" || mi.Name == "OnImportsSatisfied2");
            var container = new ContainerConfiguration()
                            .WithPart <OnImportsSatisfiedMultipleClass>(builder)
                            .WithPart <ExportValues>(builder)
                            .CreateContainer();
            var test = container.GetExport <OnImportsSatisfiedMultipleClass>();

            Assert.NotNull(test.P1);
            Assert.NotNull(test.P2);
            Assert.Equal(6, test.OnImportsSatisfiedInvoked);
        }
コード例 #22
0
        public override Action GetOperation()
        {
            var c = new ContainerConfiguration()
                    .WithPart(typeof(X))
                    .WithPart(typeof(XFactory))
                    .CreateContainer();

            var xf = c.GetExport <XFactory>();

            return(() =>
            {
                var x = xf.CreateX();
                var unused = x.Value;
                x.Dispose();
            });
        }
コード例 #23
0
        public void ConventionsCanApplyExportsToInheritedProperties()
        {
            var conventions = new ConventionBuilder();

            conventions.ForType <DerivedFromBaseWithExport>()
            .ExportProperty(b => b.Exported);

            var container = new ContainerConfiguration()
                            .WithDefaultConventions(conventions)
                            .WithParts(typeof(DerivedFromBaseWithExport))
                            .CreateContainer();

            var s = container.GetExport <string>();

            Assert.Equal("A", s);
        }
コード例 #24
0
        public void NotifyImportsSatisfiedTwice_ShouldSucceed()
        {
            var builder = new ConventionBuilder();

            builder.ForType <OnImportsSatisfiedMultipleClass>().NotifyImportsSatisfied(p => p.OnImportsSatisfied1());
            builder.ForType <OnImportsSatisfiedMultipleClass>().NotifyImportsSatisfied(p => p.OnImportsSatisfied2());
            var container = new ContainerConfiguration()
                            .WithPart <OnImportsSatisfiedMultipleClass>(builder)
                            .WithPart <ExportValues>(builder)
                            .CreateContainer();
            var test = container.GetExport <OnImportsSatisfiedMultipleClass>();

            Assert.NotNull(test.P1);
            Assert.NotNull(test.P2);
            Assert.Equal(6, test.OnImportsSatisfiedInvoked);
        }
コード例 #25
0
        public void TheProductOfAnExportFactoryCanBeDisposedDuringDisposalOfTheParent()
        {
            var container = new ContainerConfiguration()
                            .WithPart <DisposesFactoryProduct>()
                            .WithPart <A>()
                            .CreateContainer();

            var dfp = container.GetExport <DisposesFactoryProduct>();

            dfp.CreateProduct();

            var a = dfp.Product.Value as A;

            container.Dispose();

            Assert.True(a.IsDisposed);
        }
コード例 #26
0
        public void ConventionBuilderExportsOpenGenerics()
        {
            var rb = new ConventionBuilder();

            rb.ForTypesDerivedFrom <IContainer>()
            .Export <IContainer>();

            rb.ForTypesDerivedFrom(typeof(IRepository <>))
            .Export(t => t.AsContractType(typeof(IRepository <>)));

            var c = new ContainerConfiguration()
                    .WithParts(new Type[] { typeof(EFRepository <>), typeof(Container) }, rb)
                    .CreateContainer();

            var r     = c.GetExport <IRepository <int> >();
            var fetch = r.Fetch();
        }
コード例 #27
0
		public void Shared()
		{
			var parts = new[] { typeof(IHelloWorldShared), typeof(HelloWorldShared) }.AsApplicationParts();
			
			var container = new ContainerConfiguration().WithParts( parts.ToArray(), ConventionBuilderFactory.Default.Get() ).CreateContainer();
			var export = container.GetExport<IHelloWorldShared>();
			Assert.IsType<HelloWorldShared>( export );
			Assert.Same( export, container.GetExport<IHelloWorldShared>() );
			Assert.Same( container.GetExport<HelloWorldShared>(), container.GetExport<HelloWorldShared>() );
			Assert.Same( container.GetExport<HelloWorldShared>(), container.GetExport<IHelloWorldShared>() );
			
		}
コード例 #28
0
        public void CreateContainer_ImportConventionsWithInheritedProperties_Success()
        {
            var conventions = new ConventionBuilder();

            conventions.ForType <Imported>().Export();
            conventions.ForType <DerivedFromBaseWithImport>()
            .ImportProperty(b => b.Imported)
            .Export();

            CompositionHost container = new ContainerConfiguration()
                                        .WithDefaultConventions(conventions)
                                        .WithParts(typeof(Imported), typeof(DerivedFromBaseWithImport))
                                        .CreateContainer();

            DerivedFromBaseWithImport export = container.GetExport <DerivedFromBaseWithImport>();

            Assert.IsAssignableFrom <Imported>(export.Imported);
        }
コード例 #29
0
        public void ConventionsCanApplyImportsToInheritedProperties()
        {
            var conventions = new ConventionBuilder();

            conventions.ForType <Imported>().Export();
            conventions.ForType <DerivedFromBaseWithImport>()
            .ImportProperty(b => b.Imported)
            .Export();

            var container = new ContainerConfiguration()
                            .WithDefaultConventions(conventions)
                            .WithParts(typeof(Imported), typeof(DerivedFromBaseWithImport))
                            .CreateContainer();

            var dfb = container.GetExport <DerivedFromBaseWithImport>();

            Assert.IsAssignableFrom(typeof(Imported), dfb.Imported);
        }
コード例 #30
0
        public void ReadOnlyPropertiesOnMetadataViewsAreIgnored()
        {
            var c = new ContainerConfiguration()
                .WithPart<HasOrder>()
                .CreateContainer();

            var l = c.GetExport<Lazy<HasOrder, ReadonlyNameOrderMetadata>>();
            Assert.Equal(1, l.Metadata.Order);
        }
コード例 #31
0
 public void VerifyAssemblyWithTwoBaseTypeWithOnlyOneExportedWorks()
 {
     var test = new ContainerConfiguration()
         .WithAssembly(typeof(ClassWithDependecy).GetTypeInfo().Assembly)
         .CreateContainer();
     var b = test.GetExport<ClassWithDependecyAndSameBaseType>();
     Assert.NotNull(b);
     Assert.NotNull(b._dep);
     Assert.Equal(b._dep.GetType(), typeof(TestDependency));
 }
コード例 #32
0
 public void VerifyAssemblyNameCanBeUsedWithContainer()
 {
     var test = new ContainerConfiguration()
         .WithAssembly(typeof(ClassWithDependecy).GetTypeInfo().Assembly)
         .CreateContainer();
     var b = test.GetExport<ClassWithDependecy>();
     Assert.NotNull(b);
     Assert.NotNull(b._dep);
 }
コード例 #33
0
        public void NotifyImportsSatisfiedTwice_ShouldSucceed()
        {
            var builder = new ConventionBuilder();
            builder.ForTypesMatching(t => true).NotifyImportsSatisfied(mi => mi.Name == "OnImportsSatisfied1" || mi.Name == "OnImportsSatisfied2");
            var container = new ContainerConfiguration()
                .WithPart<OnImportsSatisfiedMultipleClass>(builder)
                .WithPart<ExportValues>(builder)
                .CreateContainer();
            var test = container.GetExport<OnImportsSatisfiedMultipleClass>();

            Assert.NotNull(test.P1);
            Assert.NotNull(test.P2);
            Assert.Equal(6, test.OnImportsSatisfiedInvoked);
        }
コード例 #34
0
        public void NotifyImportsSatisfiedPropertiesAndFields_ShouldSucceed()
        {
            var builder = new ConventionBuilder();
            builder.ForTypesMatching(t => true).NotifyImportsSatisfied(mi => mi.Name == "OnImportsSatisfied5" || mi.Name == "OnImportsSatisfied6");
            var container = new ContainerConfiguration()
                .WithPart<OnImportsSatisfiedTestClassPropertiesAndFields>(builder)
                .WithPart<ExportValues>(builder)
                .CreateContainer();
            var test = container.GetExport<OnImportsSatisfiedTestClassPropertiesAndFields>();

            Assert.NotNull(test.P1);
            Assert.NotNull(test.P2);
            Assert.Equal(0, test.OnImportsSatisfiedInvoked);
        }
コード例 #35
0
        public void NotifyImportsSatisfiedTwice_ShouldSucceed()
        {
            var builder = new ConventionBuilder();
            builder.ForType<OnImportsSatisfiedMultipleClass>().NotifyImportsSatisfied(p => p.OnImportsSatisfied1());
            builder.ForType<OnImportsSatisfiedMultipleClass>().NotifyImportsSatisfied(p => p.OnImportsSatisfied2());
            var container = new ContainerConfiguration()
                .WithPart<OnImportsSatisfiedMultipleClass>(builder)
                .WithPart<ExportValues>(builder)
                .CreateContainer();
            var test = container.GetExport<OnImportsSatisfiedMultipleClass>();

            Assert.NotNull(test.P1);
            Assert.NotNull(test.P2);
            Assert.Equal(6, test.OnImportsSatisfiedInvoked);
        }
コード例 #36
0
        public void TheProductOfAnExportFactoryCanBeDisposedDuringDisposalOfTheParent()
        {
            var container = new ContainerConfiguration()
                .WithPart<DisposesFactoryProduct>()
                .WithPart<A>()
                .CreateContainer();

            var dfp = container.GetExport<DisposesFactoryProduct>();
            dfp.CreateProduct();

            var a = dfp.Product.Value as A;

            container.Dispose();

            Assert.True(a.IsDisposed);
        }
コード例 #37
0
        public void NotifyImportsSatisfiedAttributeAppliedToBaseClass_ShouldSucceed()
        {
            var builder = new ConventionBuilder();
            builder.ForTypesMatching(t => true).NotifyImportsSatisfied(mi => mi.Name == "OnImportsSatisfied");
            var container = new ContainerConfiguration()
                .WithPart<OnImportsSatisfiedDerivedClass>(builder)
                .WithPart<ExportValues>(builder)
                .CreateContainer();
            var test = container.GetExport<OnImportsSatisfiedDerivedClass>();

            Assert.NotNull(test.P1);
            Assert.NotNull(test.P2);
            Assert.Equal(1, test.OnImportsSatisfiedInvoked);
        }
コード例 #38
0
 public void UnsupportedMetadataViewMessageIsInformative()
 {
     var cc = new ContainerConfiguration().WithParts(typeof(ImportsWithMetadataInterface), typeof(ExportsWithMetadata)).CreateContainer();
     var x = Assert.Throws<CompositionFailedException>(() => cc.GetExport<ImportsWithMetadataInterface>());
     Assert.Equal("The type 'INamed' cannot be used as a metadata view. A metadata view must be a concrete class with a parameterless or dictionary constructor.", x.Message);
 }
コード例 #39
0
ファイル: DiscoveryTests.cs プロジェクト: noahfalk/corefx
        public void MultipleImportAttributesAreDetected()
        {
            var c = new ContainerConfiguration()
                .WithPart<MultipleImportsOnProperty>()
                .CreateContainer();

            var x = Assert.Throws<CompositionFailedException>(() => c.GetExport<MultipleImportsOnProperty>());
            Assert.Equal("Multiple imports have been configured for 'MultiImport'. At most one import can be applied to a single site.", x.Message);
        }
コード例 #40
0
        public void DictionaryImportsCompatibleWithConventionBuilder()
        {
            var rb = new ConventionBuilder();
            rb.ForType<ConventionConsumer>().Export();
            var container = new ContainerConfiguration()
                .WithPart<ConventionConsumer>(rb)
                .WithParts(typeof(ValueA), typeof(ValueB))
                .WithProvider(new DictionaryExportDescriptorProvider())
                .CreateContainer();

            var consumer = container.GetExport<ConventionConsumer>();

            Assert.Equal(2, consumer.Values.Count());
        }
コード例 #41
0
ファイル: WebBenchmarks.cs プロジェクト: ChuangYang/corefx
        public override Func<Tuple<object, Action>> GetCompositionOperation()
        {
            var container = new ContainerConfiguration()
                .WithParts(new[]{
                    typeof(WebServer),
                    typeof(Web.OperationRoot),
                    typeof(Web.GlobalA),
                    typeof(Web.GlobalB),
                    typeof(Web.Transient),
                    typeof(Web.Wide),
                    typeof(Web.A),
                    typeof(Web.B),
                    typeof(Web.Long),
                    typeof(Web.TailA),
                    typeof(Web.TailB),
                    typeof(Web.TailC)})
                .CreateContainer();

            var sf = container.GetExport<WebServer>().WebScopeFactory;
            return () =>
            {
                var x = sf.CreateExport();
                return Tuple.Create<object, Action>(x.Value, x.Dispose);
            };
        }
コード例 #42
0
		public void WithoutConvention()
		{
			var parts = new[] { typeof(IHelloWorld), typeof(HelloWorld) }.AsApplicationParts();
			var container = new ContainerConfiguration().WithParts( parts.ToArray() ).CreateContainer();
			Assert.Throws<CompositionFailedException>( () => container.GetExport<IHelloWorld>() );
		}
コード例 #43
0
        public void NotifyImportsSatisfiedAttributeAppliedToDerivedClassExportBase_ShouldSucceed()
        {
            var builder = new ConventionBuilder();
            builder.ForType<OnImportsSatisfiedDerivedClass>().NotifyImportsSatisfied(p => p.OnImportsSatisfied());
            var container = new ContainerConfiguration()
                .WithPart<OnImportsSatisfiedTestClass>(builder)
                .WithPart<OnImportsSatisfiedDerivedClass>(builder)
                .WithPart<ExportValues>(builder)
                .CreateContainer();
            var test = container.GetExport<OnImportsSatisfiedTestClass>();

            Assert.NotNull(test.P1);
            Assert.NotNull(test.P2);
            Assert.Equal(0, test.OnImportsSatisfiedInvoked);
        }
コード例 #44
0
 public void DependenciesOfSharedPartsAreResolvedInTheGlobalScope()
 {
     var cc = new ContainerConfiguration()
         .WithParts(typeof(GloballySharedWithDependency), typeof(A), typeof(DataConsistencyBoundaryProvider))
         .CreateContainer();
     var s = cc.GetExport<DataConsistencyBoundaryProvider>().SharingScopeFactory.CreateExport();
     var g = s.Value.GetExport<GloballySharedWithDependency>();
     s.Dispose();
     var a = (A)g.A;
     Assert.False(a.IsDisposed);
     cc.Dispose();
     Assert.True(a.IsDisposed);
 }