内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

Ninject如何在ASP.NETMVC中使用-創(chuàng)新互聯(lián)

Ninject如何在ASP.NET MVC中使用?相信很多沒有經(jīng)驗的人對此束手無策,為此本文總結了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。

創(chuàng)新互聯(lián)建站堅持“要么做到,要么別承諾”的工作理念,服務領域包括:成都網(wǎng)站建設、網(wǎng)站設計、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣等服務,滿足客戶于互聯(lián)網(wǎng)時代的市中網(wǎng)站設計、移動媒體設計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡建設合作伙伴!

Ninject是一個快如閃電的,輕量級的。。。。。依賴注入框架,呃呃呃,貌似很少用到,Ninject就是一個DI容器,作用是對ASP.NET MVC程序中的組件進行解耦 ,說到解耦其實也有其他的方式可以達到解耦這個目的,比如接口

public interface ITest
{
 Decimal ValueProducts(IEnumerable<Product>products) ;
}
public class Test:ITest
{
 public Decimal ValueProducts(IEnumerable<Product>products) 
 {
 return products.sum(p=>p.Price);
 }
}
public class ShoppingCart
{
 private ITest test;
 public IEnumerable<Product>products{set;get;}
 public ShoppingCart( ITest test)
 {
 this.test=test;
 }
 public Decimal result(products);
}

通過接口可以說達到了我們想要的結果,也就是Shopping和Test之間的耦合。但是在控制器中卻沒辦法達到這個目的

public ActionResult Index(){
 ITest IT=new Test();
 ShoppingCart cart=new ShoppingCart(IT);{Products=products};
 Decimal total=IT.result();
 return View(total);
}

我們只能借助Ninject來幫我們實現(xiàn)

可以通過nuget下載Ninect也可以通過Ninject下載

那么我們該怎么使用Ninject幫我們解決上述的問題呢?

其實使用Ninect不難,一共三個步驟:

//在控制器
public ActionResult Index()
{
 1:創(chuàng)建一個Ninject的內(nèi)核
 IKernel ninject=new StandardKernel();
 2:就是配置Ninject內(nèi)核,其實就是將實現(xiàn)類和接口類綁定在一起
 ninject.Bind<ITest>().To<Test>();
 3:最后一步就是使用Ninject創(chuàng)建一個對象了
 ITest IT=ninject.Get<ITest>();
}

從創(chuàng)建內(nèi)核到創(chuàng)建對象跟Spring.Net倒是很相似。

可能有點點強迫癥吧,覺得這么一坨東西放在那里好礙眼吖,不可能叫我每一個動作里面都寫這一坨東西吧,當然不是。

下面就創(chuàng)建一個依賴項解析器(好像很高大上一樣,其實就是將上面的代碼做個封裝而已)

public class NinjectResolver:IDependencyResolver
{
 private IKernel kernel;
 public NinjectResolver(IKernel kernel)
 {
 this.kernel=kernel; 
 AddBinding();
 }
 public IEnumerable<Object> GetServices(Type serviceType)
 {
 return kernel.GetAll(serviceType);
 }
 public Object GetService(Type serviceType)
 {
 return kernel.TryGet(serviceType);
 } 
 void AddBinding()
 {
 kernel.Bind<ITest>().To<Test>();
 }
}

IDependencyResolver這個是System.Mvc里面的繼承這個接口必須實現(xiàn)GetServices和GetService,AddBinding這個方法是用來綁定實現(xiàn)類和接口

GetService方法中的TryGet類似于上面的Get,當沒有合適的綁定時,這個會返回一個null值,不會拋異常,而GetServices方法中的GetAll對單一類型的多個綁定時,可以用到這個


最后一步就是在App_Start這一個文件夾中找到NinjectWebCommon.cs這個文件再找到 RegisterServices(IKernel kernel)這個方法添加System.Web.Mvc.DependencyResolver.SetResolver(newNinjectResolver(kernel));


這時候我們修改下控制器中的代碼


private ITest test;
public HomeController(ITest test)
{
 this.test=test;
}
public ActionResult Index(){
 ShoppingCart cart=new ShoppingCart(IT);{Products=products};
 Decimal total=IT.result(); return View(total);
}

Ninject大概的用法也差不多了,下面說的時Ninject比較新穎的東西
就是指定屬性或者構造函數(shù)傳值了,其實也沒什么,只是WithConstructorArgument和WithPropertyValue這兩個的使用


public interface IHelper
 {
 Decimal ApplyDiscount(Decimal totalParam); 
 }
 public class Helper : IHelper
 {
 public Decimal DiscountSize { set; get; } 
 
 public decimal ApplyDiscount(decimal totalParam)
 {
 return (totalParam - (discountparam / 100m * totalParam));
 }
 }
private void AddBindings()
 {
 kernel.Bind<ITest>().To<Test>();
 
 kernel.Bind<IHelper>().To<Helper>().WithPropertyValue("DiscountSize", 50M); kernel.Bind<IHelper>().To<Helper>().WithConstructorArgument("discountparam", 50M);
 }

WithPropertyValue這個有兩個參數(shù)一個是屬性名,一個是屬性值,這樣子可以一開始就給這個屬性賦值上默認值,個人感覺作用倒是不大,也有其他的方法可以實現(xiàn)同樣效果


WithConstructorArgument這個也差不多,參數(shù)一是構造函數(shù)的形參,后面的參數(shù)是值


ASP.NET 是什么

ASP.NET 是開源,跨平臺,高性能,輕量級的 Web 應用構建框架,常用于通過 HTML、CSS、JavaScript 以及服務器腳本來構建網(wǎng)頁和網(wǎng)站。

看完上述內(nèi)容,你們掌握Ninject如何在ASP.NET MVC中使用的方法了嗎?如果還想學到更多技能或想了解更多相關內(nèi)容,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!

當前文章:Ninject如何在ASP.NETMVC中使用-創(chuàng)新互聯(lián)
網(wǎng)頁地址:http://www.rwnh.cn/article12/cspjdc.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設計公司、電子商務、全網(wǎng)營銷推廣網(wǎng)站策劃、外貿(mào)建站網(wǎng)站改版

廣告

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

微信小程序開發(fā)
河池市| 陕西省| 精河县| 吴川市| 茂名市| 交城县| 子长县| 诏安县| 左权县| 河间市| 望都县| 安平县| 黔东| 商南县| 集贤县| 岢岚县| 蒲江县| 晋江市| 军事| 巴彦县| 肇庆市| 丹江口市| 通城县| 永平县| 武鸣县| 沂水县| 长兴县| 武功县| 深泽县| 白银市| 芮城县| 汉中市| 金塔县| 会昌县| 瑞金市| 崇信县| 榆树市| 鄱阳县| 闻喜县| 玛沁县| 七台河市|