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);
}
}
}
|