从导出器内部使用MEF,是否可以使用元数据找出谁是导入者?
例如这是可能的:
[Export("Config")]
String Config()
{
if (importer.metedata["name"] == "Circle")
return "R=10";
}
这样导入者不需要传递某些东西(他的名字,这里)来告诉出口商谁是他。
答案 0 :(得分:1)
不,你不能这样做。这样做更有意义:
[Export("Config")]
string GetConfigurationValue(string name)
{
if (name == "Circle")
{
return "R=10";
}
throw new ArgumentException(
string.Format("Unknown configuration value '{0}'", name));
}
导入此方法的类可能如下所示:
[Export(typeof(IDrawer))]
public class CircleDrawer : IDrawer
{
[Import("Config")]
public Func<string,string> ConfigGetter { get; set; }
public void Draw()
{
string configuration = this.ConfigGetter("Circle");
...
}
}
请注意,直接导入和导出方法(如System.Action
或System.Func
)是快速而肮脏的方式。
最好是声明IConfigurationProvider
接口,然后在类级别导出。这有两个好处:
typeof(IConfigurationProvider)
替换它们,消除了导入/导出属性中那些讨厌字符串的需求。