大多数时候我们无条件地导入出口。 我想导入一些配置。像这样的东西:
[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
}
我的问题是如何将参数从导入端传递到导出的函数。请注意,我在导入器的构造函数中使用导出函数(接受参数)。
答案 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; }
只需使用委托来执行导入的函数。
希望有所帮助。