MEF声明导出
声明导出
以下内容是从http://mef.codeplex.com/提取而来
MEF的导出是通过Export属性来标示的,可以导出部件、属性、方法
字段。
部件导出:
[Export]
public class SomeComposablePart {
...
}
属性导出
原因:
1、可以导出CLR的最终类型,或者第三方类型
2、创建耦合导出
3、可以导出相关系列的默认部件
public class Configuration
{
[Export("Timeout")]
public int Timeout
{
get { return int.Parse(ConfigurationManager.AppSettings["Timeout"]); }
}
}
[Export]
public class UsesTimeout
{
[Import("Timeout")]
public int Timeout { get; set; }
}
方法导出:
有点:
1、更精确的控制导出
2、生成轻量级的代码,不能作为其他导出
3、屏蔽其他类型的调用
public class MessageSender
{
[Export(typeof(Action<string>))]
public void Send(string message)
{
Console.WriteLine(message);
}
}
[Export]
public class Processor
{
[Import(typeof(Action<string>))]
public Action<string> MessageSender { get; set; }
public void Send()
{
MessageSender("Processed");
}
}
public class MessageSender
{
[Export("MessageSender")]
public void Send(string message)
{
Console.WriteLine(message);
}
}
[Export]
public class Processor
{
[Import("MessageSender")]
public Action<string> MessageSender { get; set; }
public void Send()
{
MessageSender("Processed");
}
}
继承导出
MEF支持接口和基类的导出,在不修改旧功能代码的最好选择,用InheritedExport标示。
[InheritedExport]
public interface ILogger {
void Log(string message);
}
public class Logger : ILogger {
public void Log(string message);
}