Esempio n. 1
0
        private void assertExportsAndDispose(MefSingletonComposer composer)
        {
            int         composedCount = 0;
            MefComposer lastComposer  = null;
            ComposerEventArgs <ContainerConfiguration> lastComposedEventArgs = null;

            composer.Composed += (s, e) =>
            {
                ++composedCount;
                lastComposer          = s as MefComposer;
                lastComposedEventArgs = e;
            };

            Assert.AreSame(composer.Compose(), lastComposedEventArgs.Target);
            Assert.AreEqual(1, composedCount);
            Assert.IsNotNull(lastComposedEventArgs);
            Assert.IsNotNull(lastComposedEventArgs.Target);
            Assert.IsNotNull(lastComposer);
            Assert.AreSame(composer, lastComposer);

            IParent[] exports
                = composer.ExportsList.OfType <IParent>()
                  .ToArray();
            Helper.AssertValidParents(exports);
            composer.Dispose();
            if (composer.DisposeCompositionHostsWithThis)
            {
                Helper.AssertDisposedParents(exports);
            }
            else
            {
                Helper.AssertValidParents(exports);
            }
        }
Esempio n. 2
0
        private void assertWithMefDirectoryPartWatcher(
            MefDirectoryPartWatcher contributor,
            MefSingletonComposer composer)
        {
            int compositionRequestedCount = 0;

            contributor.CompositionRequested += (sender, compositionEventArgs) => ++ compositionRequestedCount;
            composer.Participate(contributor);
            assertExportsAndDispose(composer);
            Assert.AreEqual(0, compositionRequestedCount);             // Zero in both cases
        }
Esempio n. 3
0
        public void TestMefSingletonComposerWithDirectory()
        {
            using (Helper.GetTempDir(
                       nameof(MefSingletonComposerTests.TestMefSingletonComposerWithDirectory),
                       out string tempDir)) {
                // Dispose
                MefSingletonComposer composer = MefSingletonComposer.ForSingleType <IParent>(true);
                assertWithMefDirectoryPartWatcher(
                    new MefDirectoryPartWatcher(new DirectoryWatcher(tempDir, "*.dll")),
                    composer);

                // Don't dispose
                composer = MefSingletonComposer.ForSingleType <IParent>(true, false);
                assertWithMefDirectoryPartWatcher(
                    new MefDirectoryPartWatcher(new DirectoryWatcher(tempDir, "*.dll")),
                    composer);
            }
        }
Esempio n. 4
0
        public void TestMefSingletonComposerWithAssemblies()
        {
            MefSingletonComposer composer = MefSingletonComposer.ForSingleType <IParent>(true);

            composer.Participate(
                new MefAssemblyPartProvider(
                    GetType()
                    .Assembly.AsSingle()));
            assertExportsAndDispose(composer);

            // Don't dispose
            composer = MefSingletonComposer.ForSingleType <IParent>(true, false);
            composer.Participate(
                new MefAssemblyPartProvider(
                    GetType()
                    .Assembly.AsSingle()));
            assertExportsAndDispose(composer);
        }