CompositionContainer.Compose(CompositionBatch) Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Добавляет в контейнер или удаляет из контейнера части, содержащиеся в указанном объекте CompositionBatch, и выполняет композицию.
public:
void Compose(System::ComponentModel::Composition::Hosting::CompositionBatch ^ batch);
public void Compose (System.ComponentModel.Composition.Hosting.CompositionBatch batch);
member this.Compose : System.ComponentModel.Composition.Hosting.CompositionBatch -> unit
Public Sub Compose (batch As CompositionBatch)
Параметры
- batch
- CompositionBatch
Изменения объекта CompositionContainer, которые должны быть включены в композицию.
Примеры
В этом простом примере три части создаются и добавляются в CompositionContainer, а одна часть извлекается, чтобы показать, что все импорты заполнены. В этом примере используется модель программирования с атрибутами.
[Export]
class Part1
{
public String data = "This is the example data!";
}
[Export]
class Part2
{
[Import]
public Part1 data { get; set; }
}
[Export]
class Part3
{
[Import]
public Part2 data { get; set; }
}
class Program
{
static void Main(string[] args)
{
CompositionContainer container = new CompositionContainer();
CompositionBatch batch = new CompositionBatch();
batch.AddPart(AttributedModelServices.CreatePart(new Part1()));
batch.AddPart(AttributedModelServices.CreatePart(new Part2()));
batch.AddPart(AttributedModelServices.CreatePart(new Part3()));
container.Compose(batch);
Part3 _part = container.GetExportedValue<Part3>();
Console.WriteLine(_part.data.data.data);
Console.ReadLine();
}
}
<Export()>
Public Class Part1
Public ReadOnly Property data As String
Get
Return "This is the example data!"
End Get
End Property
End Class
<Export()>
Public Class Part2
<Import()>
Public Property data As Part1
End Class
<Export()>
Public Class Part3
<Import()>
Public Property data As Part2
End Class
Sub Main()
Dim container As New CompositionContainer()
Dim batch As New CompositionBatch()
batch.AddPart(AttributedModelServices.CreatePart(New Part1()))
batch.AddPart(AttributedModelServices.CreatePart(New Part2()))
batch.AddPart(AttributedModelServices.CreatePart(New Part3()))
container.Compose(batch)
Dim _part As Part3
_part = container.GetExportedValue(Of Part3)()
Console.WriteLine(_part.data.data.data)
Console.ReadLine()
End Sub
Комментарии
Этот метод является основным способом непосредственного добавления или удаления частей из контейнера. всегда CompositionContainer будет поддерживать стабильное составное состояние. Поэтому вызов Compose с пустым CompositionBatch никогда не требуется для начала композиции. Вместо этого вызывайте метод всякий Compose раз, когда необходимо внести изменения в части, доступные для CompositionContainer.
Может CompositionBatch содержать как добавляемые, так и удаляемые части. Повторное размещение будет выполняться только один раз для каждого вызова Compose.