如何通过将参数传递给MEF中的导出器来导入零件?

Xaq*_*ron 2 parameters import mef export

大多数时候我们无条件地进口出口.我想导入一些配置.这样的事情:

[Import(typeof(System.Configuration.Configuration))]
private Configuration config
{
    get;
    set;
}
Run Code Online (Sandbox Code Playgroud)

问题是在导出端我需要传递一个参数来获得正确的配置.这是导出的功能:

[Export(typeof(System.Configuration.Configuration))]
private Configuration GetConfig(String name)
{
    // Load proper configuration and return it
}
Run Code Online (Sandbox Code Playgroud)

我的问题是如何将参数从导入端传递给导出的函数.请注意,我在导入器的构造函数中使用导出函数(接受参数).

Mat*_*ott 6

您可以做的是,使用Func<T, U>和MEF将为您处理代表.例如:

public class FirstClass
{
  [Export("Method")]
  public string Method(string arg)
  {
    return arg.ToUpperInvariant();
  }
}

public class SecondClass
{
  [Import("Method")]
  public Func<string, string> Func;
}
Run Code Online (Sandbox Code Playgroud)

在该示例中,我正在导出命名合同,MEF将自动确定如何为我连接目标代理.我也可以Export编辑Func<string, string>.

所以在你的情况下,我会改变你Export的:

[Export("GetConfiguration")]
Run Code Online (Sandbox Code Playgroud)

而你Import和目标财产:

[Import("GetConfiguration")]
public Func<string, Configuration> GetConfig { get; set; }
Run Code Online (Sandbox Code Playgroud)

并且只需使用委托来执行导入的函数.

希望有所帮助.