Поделиться через


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.

Применяется к

См. также раздел