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

ContainerFactory.cs « Factories « Composition « ComponentModel « System « ComponentModelUnitTest « Tests « System.ComponentModel.Composition « class « mcs - github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 059e665de795f4d26cc29d7708e9b0bb237bdbaf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
// -----------------------------------------------------------------------
// Copyright (c) Microsoft Corporation.  All rights reserved.
// -----------------------------------------------------------------------
using System;
using System.ComponentModel.Composition;
using System.ComponentModel.Composition.AttributedModel;
using System.ComponentModel.Composition.Hosting;
using System.ComponentModel.Composition.Primitives;
using System.Linq;
using Microsoft.VisualStudio.TestTools.UnitTesting;


namespace System.ComponentModel.Composition.Factories
{
    internal static partial class ContainerFactory
    {
        public static CompositionContainer Create()
        {
            return Create((ComposablePart[])null);
        }

        public static CompositionContainer Create(ComposablePartCatalog catalog)
        {
            return new CompositionContainer(catalog);
        }

        public static CompositionContainer Create(CompositionContainer parent)
        {
            return new CompositionContainer(parent);
        }

        public static CompositionContainer Create(params ComposablePart[] parts)
        {
            return Create((CompositionContainer)null, parts);
        }

        public static CompositionContainer CreateWithDefaultAttributedCatalog()
        {
            var catalog = CatalogFactory.CreateDefaultAttributed();

            return Create(catalog);            
        }

        public static CompositionContainer CreateWithAttributedCatalog(params Type[] types)
        {
            var catalog = CatalogFactory.CreateAttributed(types);

            return Create(catalog);
        }

        public static CompositionContainer CreateAttributed(params object[] parts)
        {
            var container = new CompositionContainer();
            var partsArray = new ComposablePart[parts.Length];

            for (int i = 0; i < parts.Length; i++)
            {
                Assert.IsNotInstanceOfType(parts[i], typeof(Type), "You should be using CreateWithAttributedCatalog not CreateAttributed");
                partsArray[i] = PartFactory.CreateAttributed(parts[i]);
            }

            return Create(partsArray);
        }

        public static CompositionContainer Create(CompositionContainer parent, params ComposablePart[] parts)
        {
            CompositionContainer container;
            if (parent == null)
            {
                container = new CompositionContainer();
            }
            else
            {
                container = new CompositionContainer(parent);
            }

            if (parts != null)
            {
                CompositionBatch batch = new CompositionBatch(parts, Enumerable.Empty<ComposablePart>());
                container.Compose(batch);
            }

            return container;
        }

        public static CompositionContainer Create(params MicroExport[] exports)
        {
            var part = PartFactory.CreateExporter(exports);

            return Create(part);
        }

        public static CompositionContainer Create(CompositionContainer parent, params MicroExport[] exports)
        {
            var part = PartFactory.CreateExporter(exports);

            return Create(parent, part);
        }

     
        public static CompositionContainer CreateDisposable(Action<bool> disposeCallback)
        {
            return new DisposableCompositionContainer(disposeCallback);
        }
    }
}