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);
}

posted @ 2010-11-10 11:50  星空有我  阅读(386)  评论(0编辑  收藏  举报