我是System.Action的新手< T>和Lambda表达。这是我想要使用的一个案例。
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&lt; CompositionBatch&gt; action)用于将MEF目录部件初始化为CompositionBatch实例,该实例添加所有导入和导出部件。之后,批处理组成容器以解析所有DI映射。
我不确定我是否使用System.Action&lt; T&gt;和Lambda表达式在这里正确。在这个例子中,x是否会由Composition()CTOR动态创建吗?我应该在方法Initialize()中添加任何内容吗?或者我应该创建一个委托作为Initialize()(如果是这样,我认为我仍然需要将它绑定到一个方法)?
答案 0 :(得分:1)
这里的问题是你永远不会调用你的lambda表达式。为此,您需要更改Initialize()
方法,如下所示:
private void Initialize(Action<CompositonBatch> action) {action(new Composition());}
注意现在你实际上如何调用传递给函数的方法。此外,你的构造函数中有一个拼写错误(初始化而不是初始化),我没有看到声明instance1
和instance2
的位置。
但我不确定你真的在这里获得了什么。还要注意,这将在batch
变量上创建一个闭包。