欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

ASP.NETMVC學(xué)前篇之Ninject的初步了解-創(chuàng)新互聯(lián)

ASP.NET MVC學(xué)前篇之Ninject的初步了解

創(chuàng)新互聯(lián)建站專注于企業(yè)全網(wǎng)整合營(yíng)銷推廣、網(wǎng)站重做改版、福貢網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5高端網(wǎng)站建設(shè)商城建設(shè)、集團(tuán)公司官網(wǎng)建設(shè)、外貿(mào)網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁(yè)設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為福貢等各大城市提供網(wǎng)站開(kāi)發(fā)制作服務(wù)。

1.介紹

廢話幾句,Ninject是一種輕量級(jí)的、基礎(chǔ).NET的一個(gè)開(kāi)源IoC框架,在對(duì)于MVC框架的學(xué)習(xí)中會(huì)用到IoC框架的,因?yàn)檫@種IoC開(kāi)源框架有很多,本篇的主題只有一個(gè),就是讓閱讀過(guò)本篇幅的朋友逗知道IoC框架在項(xiàng)目中的作用,以及它的重要性。 這樣做的目的是以便在以后的學(xué)習(xí)工作中選擇自己中意的一個(gè)IoC框架來(lái)學(xué)習(xí)、使用,或者是自己去實(shí)現(xiàn)一個(gè)。好了,不廢話了。

2.環(huán)境準(zhǔn)備

1.新建個(gè)4.0Framework的一個(gè)控制臺(tái)應(yīng)用程序項(xiàng)目,名稱為IoCDemo

2.在http://www.ninject.org/download網(wǎng)頁(yè)中,下載Version 2.2版本的Ninject程序集(之前版本的不支持4.0庫(kù)),下載完成解壓后會(huì)看到如圖1里的幾個(gè)文件,在這里你只需要關(guān)心名稱為Ninject的文件,其它的忽略掉。

圖1

 ASP.NET MVC學(xué)前篇之Ninject的初步了解

3.在項(xiàng)目中新建個(gè)Lib文件夾,并把Ninject.dll、Ninject.pdb和Ninject.xml三個(gè)文件拷貝到文件目錄下,并且添加引用到項(xiàng)目中。如圖2:

圖2

ASP.NET MVC學(xué)前篇之Ninject的初步了解

環(huán)境準(zhǔn)備工作做好了,可以安心的來(lái)看示例了。捎帶一句Ninject.xml文件是程序集文件的注釋,不過(guò)都是英文的,對(duì)于姿勢(shì)水平不高的屌絲來(lái)說(shuō)這并不算是福利,當(dāng)然也包括本人。(ps:谷歌翻譯什么的很好用)

3.初步認(rèn)識(shí)、了解

從上一篇的文章中,可以了解到一個(gè)基礎(chǔ)的IoC,這是站在容器對(duì)象的角度去考慮的,具體實(shí)現(xiàn)對(duì)象確實(shí)是可以動(dòng)態(tài)的注入到容器對(duì)象中的。我們?cè)倏匆幌滦碌氖纠闹姓业缴弦黄蛔愕牡胤剑瑩Q個(gè)角度去看問(wèn)題。

我們先定義了一個(gè)商品類,內(nèi)容只包含了商品的編號(hào)、名稱和價(jià)格三個(gè)屬性

代碼3-1

1     /// <summary>
2     /// 貨品
3     /// </summary>
4     public class Commodity
5     {
6         public string CommodityID { get; set; }
7         public string Name { get; set; }
8         public float Price { get; set; }
9     }

商品類型定義好了之后,我們?cè)俣x個(gè)貨品的計(jì)價(jià)規(guī)范和它的一個(gè)基礎(chǔ)實(shí)現(xiàn)

代碼3-2

 1     /// <summary>
 2     /// 貨品計(jì)價(jià)規(guī)范
 3     /// </summary>
 4     public interface IValuation
 5     {
 6         float CommodityValuation(params Commodity[] commodities);
 7     }
 8 
 9     /// <summary>
10     /// 貨品計(jì)價(jià)規(guī)范實(shí)現(xiàn)一:商品價(jià)格合計(jì)
11     /// </summary>
12     public class CommoditySumValuation : IValuation
13     {
14         public float CommodityValuation(params Commodity[] commodities)
15         {
16             return commodities.Sum(commodity => commodity.Price);
17         }
18     }

這樣看來(lái)架勢(shì)和上一篇的相同,前段的確實(shí)是差不多的,不要著急慢慢來(lái)看。再定義個(gè)容器對(duì)象,并且通過(guò)構(gòu)造注入的方式來(lái)實(shí)現(xiàn)解耦,讓容器對(duì)象和具體實(shí)現(xiàn)徹底的分離了。

代碼3-3

 1     /// <summary>
 2     /// 購(gòu)物車-容器對(duì)象
 3     /// </summary>
 4     public class ShoppingCart
 5     {
 6         private IValuation _Valuation;
 7         public ShoppingCart(IValuation valuation)
 8         {
 9             _Valuation = valuation;
10         }
11 
12         public float CommodityTotalPrice()
13         {
14             Commodity[] commodities =
15             {
16                 new Commodity(){ CommodityID="A1", Price=14},
17                 new Commodity(){ CommodityID="A2", Price=76.5f},
18                 new Commodity(){ CommodityID="B2", Price=34.4f},
19                 new Commodity(){ CommodityID="C4", Price=23.1f}
20             };
21 
22             return _Valuation.CommodityValuation(commodities);
23         }
24     }

對(duì)于上面那句話的定義,站在不同角度定義結(jié)果是不同的,如果站在容器對(duì)象的角度來(lái)看,確實(shí)是實(shí)現(xiàn)了解耦,如圖3

圖3

ASP.NET MVC學(xué)前篇之Ninject的初步了解

從圖中可以明確的看到ShoppingCart類型(容器)和CommoditySumValuation類型(具體實(shí)現(xiàn))沒(méi)有任何的關(guān)系,從而以達(dá)到解耦的目的,但是問(wèn)題要結(jié)合到實(shí)際從客戶端調(diào)用容器對(duì)象來(lái)看:

代碼3-4

 1 namespace IoCDemo
 2 {
 3     class Program
 4     {
 5         static void Main(string[] args)
 6         {
 7             ShoppingCart shoppingCart = new ShoppingCart(new CommoditySumValuation());
 8 
 9         }
10     }
11 }

代碼看到這里,想必大家都會(huì)頭疼了,這整的叫什么事,饒了一圈還是耦合了。如圖4

圖4

ASP.NET MVC學(xué)前篇之Ninject的初步了解

這種情況下IoC框架就可以派上用場(chǎng)了,本篇介紹的是Ninject,那當(dāng)然是用Ninject了,根據(jù)前面的環(huán)境配置,

代碼3-5

 1 using Ninject;
 2 
 3 namespace IoCDemo
 4 {
 5     class Program
 6     {
 7         static void Main(string[] args)
 8         {
 9             #region IoC框架功能
10             IKernel kernel = new StandardKernel();
11             kernel.Bind<IValuation>().To<CommoditySumValuation>();
12             IValuation valuation = kernel.Get<IValuation>();
13             #endregion
14 
15             ShoppingCart shoppingCart = new ShoppingCart(valuation);
16             Console.WriteLine(shoppingCart.CommodityTotalPrice().ToString());
17             Console.ReadLine();
18         }
19     }
20 }

這里是通過(guò)Ninject中的IKernel類型的Bind泛型方法來(lái)綁定IValuation類型,用To泛型方法中的類型表示是Bind方法中類型的實(shí)現(xiàn),這樣在kernel.Get<IValuation>()的時(shí)候是返回的CommoditySumValuation類型。這里對(duì)Ninject的使用并不多做介紹,而是側(cè)重的解釋IoC的重要性及其作用。

這個(gè)時(shí)候的依賴結(jié)構(gòu)如下圖5

圖5

ASP.NET MVC學(xué)前篇之Ninject的初步了解

這樣可能看不出IoC的效果,我們?cè)傩略鲆恍┬枨螅⑶腋腃ommoditySumValuation實(shí)現(xiàn)類,

代碼3-6

 1     /// <summary>
 2     /// 計(jì)價(jià)折扣算法規(guī)范
 3     /// </summary>
 4     public interface IValuationDisCount
 5     {
 6         float ValuationDisCount(float listPrice);
 7     }
 8 
 9     /// <summary>
10     /// 計(jì)價(jià)折扣算法規(guī)范實(shí)現(xiàn)一:九折 走起
11     /// </summary>
12     public class DisCount : IValuationDisCount
13     {
14 
15         public float ValuationDisCount(float listPrice)
16         {
17             return listPrice - (listPrice * 10 / 100);
18         }
19     }

添加了一個(gè)新需求規(guī)范和一個(gè)新的實(shí)現(xiàn)類,這樣可以給商品總和來(lái)打折了,還需在CommoditySumValuation實(shí)現(xiàn)類中實(shí)現(xiàn)構(gòu)造注入,修改代碼如下:

代碼3-7

 1     /// <summary>
 2     /// 貨品計(jì)價(jià)規(guī)范實(shí)現(xiàn)一:商品價(jià)格合計(jì)
 3     /// </summary>
 4     public class CommoditySumValuation : IValuation
 5     {
 6         private IValuationDisCount valuationDisCount;
 7 
 8         public CommoditySumValuation(IValuationDisCount valuationdiscount)
 9         {
10             this.valuationDisCount = valuationdiscount;
11         }
12 
13         public float CommodityValuation(params Commodity[] commodities)
14         {
15             return valuationDisCount.ValuationDisCount(commodities.Sum(commodity => commodity.Price));
16         }
17     }

這個(gè)時(shí)候如果沒(méi)有IoC框架的存在,看下客戶端是怎么來(lái)調(diào)用的:

代碼3-8

 1 using Ninject;
 2 
 3 namespace IoCDemo
 4 {
 5     class Program
 6     {
 7         static void Main(string[] args)
 8         {
 9             ShoppingCart shoppingCart =
10                 new ShoppingCart(new CommoditySumValuation(new DisCount()));
11 
12             Console.WriteLine(shoppingCart.CommodityTotalPrice().ToString());
13             Console.ReadLine();
14         }
15     }
16 }

運(yùn)行一下同樣也能得到結(jié)果,但是不管怎么的去抽象,在客戶端調(diào)用都需要直接依賴于實(shí)現(xiàn)類,而不是高層次的抽象,

圖7

ASP.NET MVC學(xué)前篇之Ninject的初步了解

從圖中可以看出來(lái)這是多么的恐怖。重新的修改下Main函數(shù)里的代碼把IoC框架給使用起來(lái)。

代碼3-9

 1 using Ninject;
 2 
 3 namespace IoCDemo
 4 {
 5     class Program
 6     {
 7         static void Main(string[] args)
 8         {
 9             #region IoC框架功能
10             IKernel kernel = new StandardKernel();
11             kernel.Bind<IValuation>().To<CommoditySumValuation>();
12             kernel.Bind<IValuationDisCount>().To<DisCount>();
13             IValuation valuation = kernel.Get<IValuation>();
14             #endregion
15 
16             ShoppingCart shoppingCart = new ShoppingCart(valuation);
17 
18             Console.WriteLine(shoppingCart.CommodityTotalPrice().ToString());
19             Console.ReadLine();
20         }
21     }
22 }

結(jié)果如圖8:

圖8

ASP.NET MVC學(xué)前篇之Ninject的初步了解

再來(lái)看一下依賴結(jié)構(gòu),

圖9

ASP.NET MVC學(xué)前篇之Ninject的初步了解

Ninject框架會(huì)檢查要返回的類型所依賴的所有類型,并且也會(huì)動(dòng)態(tài)的注入到類型當(dāng)中。
從圖7和圖9的對(duì)比中可以看出,只有通過(guò)增加IoC框架來(lái)進(jìn)行客戶端和具體實(shí)現(xiàn)的解耦,沒(méi)有這個(gè)中間層的加入還真的不好來(lái)實(shí)現(xiàn)消除耦合,并且IoC框架還可以進(jìn)行動(dòng)態(tài)配置。
本篇到這里結(jié)束了,對(duì)Ninject感興趣的朋友請(qǐng)自行學(xué)習(xí)吧。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

分享題目:ASP.NETMVC學(xué)前篇之Ninject的初步了解-創(chuàng)新互聯(lián)
文章源于:http://www.chinadenli.net/article10/dodggo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站改版外貿(mào)網(wǎng)站建設(shè)品牌網(wǎng)站設(shè)計(jì)動(dòng)態(tài)網(wǎng)站軟件開(kāi)發(fā)標(biāo)簽優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

小程序開(kāi)發(fā)