摘要
在前面的章節(jié)中,我們看了在單一的綁定條件下Ninject能夠處理依賴類型,就是說(shuō),每個(gè)服務(wù)類型只綁定到單一的實(shí)現(xiàn)類型。然而,有些情況下我們需要綁定一個(gè)抽象服務(wù)類型到多個(gè)實(shí)現(xiàn),這叫多個(gè)綁定。多個(gè)綁定有兩種情況。第一個(gè)是插件模型實(shí)現(xiàn),另一個(gè)是上下文綁定。這篇文章介紹插件模型實(shí)現(xiàn),下一篇文章介紹上下文綁定。
插件模型讓一個(gè)應(yīng)用程序獲得很強(qiáng)的可擴(kuò)展性而不用修改源代碼。下面的例子,我們將實(shí)現(xiàn)一個(gè)音樂(lè)播放器應(yīng)用程序,使用解碼插件來(lái)支持不同的音樂(lè)格式。這個(gè)應(yīng)用程序使用兩個(gè)內(nèi)置的解碼器,也可以添加更多的解碼器來(lái)擴(kuò)展我們播放器支持的格式。請(qǐng)注意為了讓?xiě)?yīng)用程序盡可能簡(jiǎn)單,許多復(fù)雜的細(xì)節(jié)將不被實(shí)現(xiàn)。
先定義一個(gè)解碼器接口:
1 public interface ICodec 2 { 3 string Name { get; } 4 bool CanDecode(string extension); 5 Stream Decode(Stream inStream); 6 }
添加兩個(gè)解碼器類實(shí)現(xiàn)解碼器接口:
Mp3: