System.Action<T>とLambda式は初めてです。これが私が使いたい1つのケースです。
using System;
using System.ComponentModel.Composition;
public class MyClass {
public static CompositionContainer Container = new CompositionContainer();
private void Initialize(Action<CompositonBatch> action) {}
public MyClass() {
CompositionBatch batch = null;
inititialize(x=> {
// create catalog instances: instance1 and instance2 as example
// ...
x.AddPart(instance1);
x.AddPart(instance2);
batch = x;
});
// at this point, will be batch be none-null value will parts added?
// the following code is composing batch to the container
Container.Compose(batch);
}
}
基本的に、メソッドInitialize(Action <CompositionBatch> action)は、MEFカタログパーツをCompositionBatchインスタンスに初期化するために使用されます。これにより、すべてのインポートパーツとエクスポートパーツが追加されます。その後、すべてのDIマッピングを解決するために、バッチがコンテナーに構成されます。
ここでSystem.Action<T>とLambda式を正しく使用しているかどうかはわかりません。この例では、xはComposition()CTORによってオンフライで作成されますか?Initialize()メソッドに何かを入れる必要がありますか?または、代わりにInitialize()としてデリゲートを作成する必要がありますか(そうであれば、それをメソッドにバインドする必要があると思います)?