真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

ASP.NETMVC控制器激活(三)

 ASP.NET MVC 控制器激活(三)

前言

成都創(chuàng)新互聯(lián)公司從2013年成立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目網(wǎng)站設(shè)計(jì)制作、做網(wǎng)站網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢想脫穎而出為使命,1280元海陵做網(wǎng)站,已為上家服務(wù),為海陵各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:18980820575

在上個(gè)篇幅中說到從控制器工廠的GetControllerInstance()方法來執(zhí)行控制器的注入,本篇要講是在GetControllerInstance()方法的默認(rèn)實(shí)現(xiàn)中涉及到的一些對象類型,使用它們來進(jìn)行控制器注入。

 

對象模型

圖1

ASP.NET MVC 控制器激活(三)

如上圖1,是在控制器(一)中所講,整個(gè)的執(zhí)行過程都包含在DefaultControllerFactory控制器工廠中的GetControllerInstance()方法中,我們再來看一下IControllerActivator接口類型的定義:

 1     public interface IControllerActivator
 2     {
 3         // 摘要:
 4         //     在類中實(shí)現(xiàn)時(shí)創(chuàng)建控制器。
 5         //
 6         // 參數(shù):
 7         //   requestContext:
 8         //     請求上下文。
 9         //
10         //   controllerType:
11         //     控制器類型。
12         //
13         // 返回結(jié)果:
14         //     創(chuàng)建的控制器。
15         IController Create(RequestContext requestContext, Type controllerType);
16     }

會(huì)發(fā)現(xiàn)在里面的定義的Create()方法的簽名和DefaultControllerFactory控制器工廠中的GetControllerInstance()方法簽名相同,這就對了,這就是在GetControllerInstance()方法中的另一個(gè)注入點(diǎn),而在框架默認(rèn)的執(zhí)行中,會(huì)有一個(gè)默認(rèn)的實(shí)現(xiàn)類實(shí)現(xiàn)了IControllerActivator接口類型的DefaultControllerActivator類型,因?yàn)樗强蚣軆?nèi)部的,訪問級別是私有的,所以我們外部是調(diào)用不了的,我們這里可以自己自定義的實(shí)現(xiàn),并且注入到框架中。

IControllerActivator類型實(shí)現(xiàn)的注入

先看一下我們自定義的實(shí)現(xiàn):

 1 using System.Web.Mvc;
 2 using Ninject;
 3 using ConsoleApplication2;
 4 
 5 namespace MvcApplication.CustomControllerActivator
 6 {
 7     public class NinjectControllerActivator:IControllerActivator
 8     {
 9 
10         private IKernel _NinjectKernel;
11 
12         public NinjectControllerActivator()
13         {
14             _NinjectKernel = new StandardKernel();
15             _NinjectKernel.Bind().To();
16         }
17 
18         public IController Create(System.Web.Routing.RequestContext requestContext, Type controllerType)
19         {
20             IController controller = _NinjectKernel.Get(controllerType) as IController;
21             if (controller != null)
22             {
23                 return controller;
24             }
25             return null;
26         }
27     }

實(shí)現(xiàn)的方式和上一篇中的幾乎相同,現(xiàn)在只要在框架初始化的時(shí)候把它的實(shí)例注冊到框架中就可以了。還是再Global.asax中的Application_Start()方法中來注冊:

1 DefaultControllerFactory defaultControllerFactory =
2                 new DefaultControllerFactory(new CustomControllerActivator.NinjectControllerActivator());
3 ControllerBuilder.Current.SetControllerFactory(defaultControllerFactory);

這里要說的是DefaultControllerFactory類型的構(gòu)造函數(shù)重載中,如果我們傳入了自定義的IControllerActivator類型則會(huì)運(yùn)行我們的,如果沒有則框架會(huì)使用默認(rèn)的實(shí)現(xiàn)類型。也可以修改我們上一篇中定義的自定義控制器工廠,這里就不作過多的解釋了。

 

在圖1可以清楚的看到DefaultControllerActivator類型的內(nèi)部實(shí)現(xiàn),在控制器(一)一文中有描述,其中還有IDependencyResolver類型的實(shí)現(xiàn)類可以來實(shí)現(xiàn)控制器的注入,方式和上述的幾乎相近。區(qū)別就是在于IDependencyResolver類型實(shí)現(xiàn)的注入是可以面向全局的,這是框架提供給我們的便捷。

到這里控制器的激活以及控制器的動(dòng)態(tài)注入都講解完畢了,下篇進(jìn)入過MVC濾器系列。

 


網(wǎng)站名稱:ASP.NETMVC控制器激活(三)
本文地址:http://weahome.cn/article/pocjsp.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部