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

时间:2010-12-11 16:53:35

标签: parameters import export mef

大多数时候我们无条件地导入出口。 我想导入一些配置。像这样的东西:

[Import(typeof(System.Configuration.Configuration))]
private Configuration config
{
    get;
    set;
}

问题出在导出端我需要传递参数才能获得正确的配置。这是导出的函数:

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

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

1 个答案:

答案 0 :(得分: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;
}

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

因此,在您的情况下,我会将您的Export更改为:

[Export("GetConfiguration")]

您的Import和目标属性为:

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

只需使用委托来执行导入的函数。

希望有所帮助。