日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

c# MEF框架(四 见证奇迹的时刻之实战应用)

發布時間:2024/8/23 C# 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c# MEF框架(四 见证奇迹的时刻之实战应用) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉自?http://www.cnblogs.com/yunfeifei/p/3940075.html


前面三篇講了MEF的基礎和基本到導入導出方法,下面就是見證MEF真正魅力所在的時刻。如果沒有看過前面的文章,請到我的博客首頁查看。

  前面我們都是在一個項目中寫了一個類來測試的,但實際開發中,我們往往要采用分層架構,就拿最簡單的三層架構來說吧,我們通常把業務邏輯寫在DLL中,現在就來寫一個例子,看看如何在不編譯整個項目的情況下,輕松的實現擴展。先透露一下,我們只要添加一個DLL就可以了。

  這里就以銀行為例子吧,首先新建一個控制臺項目,還叫MEFDemo吧,然后建一個類庫寫接口,然后再建一個類庫實現接口。項目結構如下:

MEFDemo和BankOfChina都只引用接口項目,MEFDemo不需要引用BankOfChina。

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

點擊右鍵編譯,把生成的dll拷貝到Cards目錄下面,運行看到如下結果:

再看看Cards目錄中,現在你添加幾個dll,就會顯示多少條信息了。


總結

以上是生活随笔為你收集整理的c# MEF框架(四 见证奇迹的时刻之实战应用)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。