MEF聲明匯入

來源:互聯網
上載者:User

聲明匯入
以下內容從http://mef.codeplex.com/摘抄而來

屬性匯入
用Import標示組件作為屬性匯入
class Program
  {
    [Import]
    public IMessageSender MessageSender { get; set; }
  }

構造器參數匯入
通過將組件作為構造參數來實現匯入
使用方法:
 1、添加ImportingConstructor屬性
 2、為匯入添加構造參數
class Program
  {
    [ImportingConstructor]
    public Program(IMessageSender messageSender)
    {
       ...
    }
  }

參數匯入
class Program
  {
    [ImportingConstructor]
    public Program(IMessageSender messageSender)
    {
    }
  }

欄位匯入
  class Program
  {
    [Import]
    private IMessageSender _messageSender;
  }

隨意匯入
[Export]
public class OrderController {
  private ILogger _logger;

  [ImportingConstructor]
  public OrderController([Import(AllowDefault=true)] ILogger logger) {
    if(logger == null)
      logger = new DefaultLogger();
    _logger = logger;
  }
}

集合匯入
使用 ImportMany 屬性
public class Notifier
 {
    [ImportMany(AllowRecomposition=true)]
    public IEnumerable<IMessageSender> Senders {get; set;}

    public void Notify(string message)
    {
      foreach(IMessageSender sender in Senders)
      {
        sender.Send(message);
      }
    }
  }

IPartImportsSatisfiedNotification
public class Program : IPartImportsSatisfiedNotification
 {
    [ImportMany]
    public IEnumerable<IMessageSender> Senders {get; set;}

    public void OnImportsSatisfied()
    {
      // when this is called, all imports that could be satisfied have been

satisfied.
    }
  }

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.