久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

MEF程序設(shè)計(jì)指南一:在應(yīng)用程序中宿主MEF

 personal_hcy 2011-08-30

MEF程序設(shè)計(jì)指南一:在應(yīng)用程序中宿主MEF

分類: MEF 196人閱讀 評(píng)論(0) 收藏 舉報(bào)

  在應(yīng)用程序中宿主MEF其實(shí)非常簡(jiǎn)單,只需要?jiǎng)?chuàng)建一個(gè)組合容器對(duì)象(CompositionContainer)的實(shí)例,,然后將需要組合的部件(Parts)和當(dāng)前宿主程序添加到容器中即可,。首先需要添加MEF框架的引用,既System.ComponentModel.Composition.dll,,詳細(xì)如下代碼塊:

private void Compose()
{
    var catalog 
= new AssemblyCatalog(Assembly.GetExecutingAssembly());
    var container 
= new CompositionContainer(catalog);
    container.ComposeParts(
this);
}

 

  通過(guò)上面的代碼實(shí)現(xiàn)就可以完成MEF的宿主,,實(shí)際上在使用MEF的開(kāi)發(fā)過(guò)程中并不會(huì)如此簡(jiǎn)單的應(yīng)用??赡軙?huì)定義一個(gè)或多個(gè)導(dǎo)入(Import)和導(dǎo)出(Export)部件,,然后通過(guò)MEF容器進(jìn)行組合,其實(shí)也可以理解為“依賴注入”的一種實(shí)現(xiàn),。比如定義一個(gè)圖書接口和一個(gè)接口的實(shí)現(xiàn)類,,在此基礎(chǔ)上使用MEF的導(dǎo)入導(dǎo)出特性:

public interface IBookService
{
    
void GetBookName();
}
    
/// <summary>
/// 導(dǎo)入
/// </summary>
[Export(typeof(IBookService))]
public class ComputerBookService : IBookService
{
    
public void GetBookName()
    {
        Console.WriteLine(
"《Hello Silverlight》");
    }
}

 

  如上代碼通過(guò)使用MEF的[System.ComponentModel.Composition.Export]對(duì)接口的實(shí)現(xiàn)進(jìn)行導(dǎo)出設(shè)置,讓接口的實(shí)現(xiàn)以容器部件的方式存在,,然后通過(guò)組合容器進(jìn)行裝配加載,,這個(gè)過(guò)程中就包括了接口的實(shí)例化的過(guò)程。接下來(lái)就需要在MEF的宿主程序中定義一個(gè)接口的屬性,,并為其標(biāo)注[System.ComponentModel.Composition.Import]特性以實(shí)現(xiàn)接口實(shí)現(xiàn)類的導(dǎo)入,。如下代碼塊:

/// <summary>
/// 導(dǎo)入接口的實(shí)現(xiàn)部件(Part)
/// </summary>
[Import]
public IBookService Service { getset; }

 

  完成了導(dǎo)入導(dǎo)出的接口與實(shí)現(xiàn)的開(kāi)發(fā)及特性配置,下面就剩下一步組合了,,也就是本文提到的將部件和宿主程序自身添加到組合容器中,,以實(shí)現(xiàn)導(dǎo)入(Import)和導(dǎo)出(Export)的組合裝配。

/// <summary>
/// 宿主MEF并組合部件
/// </summary>
private void Compose()
{
    var catalog 
= new AssemblyCatalog(Assembly.GetExecutingAssembly());
    var container 
= new CompositionContainer(catalog);
    
//將部件(part)和宿主程序添加到組合容器
    container.ComposeParts(this,new ComputerBookService());
}

 

  通過(guò)以上步驟就完成了MEF的宿主以及一個(gè)簡(jiǎn)單的部件組合的應(yīng)用示例,下面是本文的完整代碼示例:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel.Composition;
using System.ComponentModel.Composition.Hosting;
using System.Reflection;

namespace HostingMef
{
    
public interface IBookService
    {
        
void GetBookName();
    }
    
    
/// <summary>
    
/// 導(dǎo)入
    
/// </summary>
    [Export(typeof(IBookService))]
    
public class ComputerBookService : IBookService
    {
        
public void GetBookName()
        {
            Console.WriteLine(
"《Hello Silverlight》");
        }
    }

    
class Program
    {
        
/// <summary>
        
/// 導(dǎo)入接口的實(shí)現(xiàn)部件(Part)
        
/// </summary>
        [Import]
        
public IBookService Service { getset; }
        
        
/// <summary>
        
/// 宿主MEF并組合部件
        
/// </summary>
        private void Compose()
        {
            var catalog 
= new AssemblyCatalog(Assembly.GetExecutingAssembly());
            var container 
= new CompositionContainer(catalog);
            
//將部件(part)和宿主程序添加到組合容器
            container.ComposeParts(this,new ComputerBookService());
        }

        
static void Main(string[] args)
        {
            Program p 
= new Program();
            p.Compose();

            p.Service.GetBookName();
        }
    }
}

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多