首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

MEF 程式設計指南(二):Silverlight 中使用 CompositionInitializer 托管 MEF

     編輯:關於.NET

MEF 除可用於傳統桌面/ Web 應用,亦支援 Silverlight。Silverlight 托管方式不同,需引用 System.ComponentModel.Composition.Initialization.dll,並在 Application_Startup 中一行程式碼完成托管:

private void Application_Startup(object sender, StartupEventArgs e)
{
    CompositionInitializer.SatisfyImports(this);
}

完整 Silverlight MEF 範例

定義日誌介面與兩種實作,以契約名稱區分:

public interface ILogger
{
    void WriteLog(string message);
}

[Export("TXT", typeof(ILogger))]
public class TXTLogger : ILogger
{
    public void WriteLog(string message) => Console.WriteLine(message);
}

[Export("DB", typeof(ILogger))]
public class DBLogger : ILogger
{
    public void WriteLog(string message) => Console.WriteLine(message);
}

建立門面服務聚合兩種日誌:

[Export]
public class FacadeService
{
    [Import("TXT")]
    public ILogger TXTLogger { get; set; }

    [Import("DB")]
    public ILogger DBLogger { get; set; }
}

在 App.xaml.cs 導入門面服務:

[Import]
public FacadeService Service { get; set; }

頁面中透過 Application.Current 取得服務並呼叫:

public MainPage()
{
    InitializeComponent();
    var service = (Application.Current as App).Service;
    service.TXTLogger.WriteLog("寫日誌到文字檔");
    service.DBLogger.WriteLog("寫日誌到資料庫");
}

此模式展示 Silverlight 中 MEF 托管、契約導入與門面模式的標準用法。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved