程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#可擴展編程之MEF學習筆記(四):見證奇跡的時刻

C#可擴展編程之MEF學習筆記(四):見證奇跡的時刻

編輯:C#入門知識

C#可擴展編程之MEF學習筆記(四):見證奇跡的時刻


BankInterface的代碼如下,做個簡單實例,寫幾個方法測試一下:   復制代碼 using System; using System.Collections.Generic; using System.Linq; using System.Text;   namespace BankInterface {    public interface ICard    {       //賬戶金額       double Money { get; set; }       //獲取賬戶信息       string GetCountInfo();       //存錢       void SaveMoney(double money);       //取錢       void CheckOutMoney(double money);    } } 復制代碼 這裡添加一個中國銀行卡,實現接口,引用命名空間什麼的不再重復說了,不懂看前面的文章,代碼如下:   復制代碼 using System; using System.Collections.Generic; using System.Linq; using System.Text; using BankInterface; using System.ComponentModel.Composition;   namespace BankOfChina {    [Export(typeof(ICard))]    public class ZHCard : ICard    {       public string GetCountInfo()       {          return "Bank Of China";       }         public void SaveMoney(double money)       {          this.Money += money;       }         public void CheckOutMoney(double money)       {          this.Money -= money;       }         public double Money { get; set; }    } } 復制代碼 然後編寫主程序,代碼如下:   復制代碼 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Reflection; using System.ComponentModel.Composition; using System.ComponentModel.Composition.Hosting; using BankInterface;   namespace MEFDemo {    class Program    {       [ImportMany(typeof(ICard))]       public IEnumerable<ICard> cards { get; set; }         static void Main(string[] args)       {          Program pro = new Program();          pro.Compose();       foreach (var c in pro.cards)       {          Console.WriteLine(c.GetCountInfo());       }              Console.Read();       }         private void Compose()       {          var catalog = new DirectoryCatalog("Cards");          var container = new CompositionContainer(catalog);          container.ComposeParts(this);       }    } } 復制代碼 現在,我們知道只有一種銀行卡,及中國銀行的,注意我標紅的代碼,這裡是一個目錄,及主程序所在目錄的Cards文件夾,我們把生成的BankOfChian.dll拷貝到這個文件夾下,然後運行才可以正確輸出信息(畢竟我們沒有引用那個項目),          到了這裡相信大家已經明白了,如果現在需求改變了,需要支持建行、農行等銀行卡,怎麼辦呢?通常我們要改項目,把整個項目都編譯再重新發布。但是現在不需要這麼做了,我們只需要添加一個類庫項目,把生成的dll拷貝到Cards目錄下即可。   我們在這個解決方案下繼續添加一個類庫項目,實現ICard接口,代碼如下:   復制代碼 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.ComponentModel.Composition; using BankInterface;   namespace NongHang {    [Export(typeof(ICard))]    public class NHCard : ICard    {       public string GetCountInfo()       {          return "Nong Ye Yin Hang";       }         public void SaveMoney(double money)       {          this.Money += money;       }         public void CheckOutMoney(double money)       {          this.Money -= money;       }         public double Money { get; set; }    } }

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved