C#/MEF don';不能使用具有默认值的[ImportingConstrutor]
本文关键字:默认值 ImportingConstrutor don MEF 不能 | 更新日期: 2023-09-27 18:22:04
我或多或少有和这个问题相同的问题:C#/MEF没有';t在没有无参数构造函数的情况下使用基类
我也理解答案。MEF不知道val的值,因此无法创建实例。
但我没有基本的ctor调用和val:的默认值
[Export(typeof(IPrimitiveDecomposer))]
public class Prim : IPrimitiveDecomposer
{
[ImportingConstructor]
public Prim(int val=0)
{//some code
}
public bool Match(Node node) {return true;}
}
代码编译得很好,但当我要求时,MEF似乎没有IPrimitiveDecomposer的导出。当我做以下所有工作都很好:
[Export(typeof(IPrimitiveDecomposer))]
public class Prim : IPrimitiveDecomposer
{
public Prim() : this(0)
public Prim(int val=0)
{//some code
}
public bool Match(Node node) {return true;}
}
谢谢你的帮助Soko
C#中的可选参数是编译时的"窍门"。第一个代码生成的构造函数没有无参数构造函数。相反,它有一个构造函数,它接受一个整数,并用属性进行修饰以提供默认值。这实际上就像在写:
public Prim([Optional, DefaultParameterValue(0)] int val)
{
C#编译器知道这些属性,当它找到需要这些信息的方法或构造函数时,会在编译时"填充"值。
MEF不寻找这些属性。它需要一个默认构造函数,或者一个构造函数,其中每个参数都由组合类型提供。在这种情况下,您的第一个版本会失败,因此MEF无法构造类型。
如您所示,使用两个构造函数是使用MEF处理此问题的正确方法。