0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

GetControllerInstance()方法控制器注入

454398 来源:博客园 作者:金源 2020-11-04 14:33 次阅读

前言

在上个篇幅中说到从控制器工厂的GetControllerInstance()方法来执行控制器的注入,本篇要讲是在GetControllerInstance()方法的默认实现中涉及到的一些对象类型,使用它们来进行控制器注入。

对象模型

图1

如上图1,是在控制器(一)中所讲,整个的执行过程都包含在DefaultControllerFactory控制器工厂中的GetControllerInstance()方法中,我们再来看一下IControllerActivator接口类型的定义:

 1     public interface IControllerActivator
 2     {
 3         // 摘要:
 4         //     在类中实现时创建控制器。
 5         //
 6         // 参数:
 7         //   requestContext:
 8         //     请求上下文。
 9         //
10         //   controllerType:
11         //     控制器类型。
12         //
13         // 返回结果:
14         //     创建的控制器。
15         IController Create(RequestContext requestContext, Type controllerType);
16     }

会发现在里面的定义的Create()方法的签名和DefaultControllerFactory控制器工厂中的GetControllerInstance()方法签名相同,这就对了,这就是在GetControllerInstance()方法中的另一个注入点,而在框架默认的执行中,会有一个默认的实现类实现了IControllerActivator接口类型的DefaultControllerActivator类型,因为它是框架内部的,访问级别是私有的,所以我们外部是调用不了的,我们这里可以自己自定义的实现,并且注入到框架中。

IControllerActivator类型实现的注入

先看一下我们自定义的实现:

 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     }

实现的方式和上一篇中的几乎相同,现在只要在框架初始化的时候把它的实例注册到框架中就可以了。还是再Global.asax中的Application_Start()方法中来注册:

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

这里要说的是DefaultControllerFactory类型的构造函数重载中,如果我们传入了自定义的IControllerActivator类型则会运行我们的,如果没有则框架会使用默认的实现类型。也可以修改我们上一篇中定义的自定义控制器工厂,这里就不作过多的解释了。

在图1可以清楚的看到DefaultControllerActivator类型的内部实现,在控制器(一)一文中有描述,其中还有IDependencyResolver类型的实现类可以来实现控制器的注入,方式和上述的几乎相近。区别就是在于IDependencyResolver类型实现的注入是可以面向全局的,这是框架提供给我们的便捷。

到这里控制器的激活以及控制器的动态注入都讲解完毕了。
编辑:hfy

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 控制器
    +关注

    关注

    112

    文章

    15029

    浏览量

    170344
收藏 人收藏

    评论

    相关推荐

    Aurix pFlash内存部分是如何在微控制器级别上创建ECC写入错误的?

    我正在查看 Aurix pFlash 内存部分是如何在微控制器级别上创建 ECC 写入错误的,以及他们是如何通过故障注入技术使用它产生多位错误的 通常 ecc 错误是使用高电压和其他方法产生的,但
    发表于 01-22 07:37

    如何通过为TC332微控制器注入ECC错误来测试RAM错误?

    我们使用的是 TC332 微控制器,我们使用了 MBIST 测试和无损测试方法。 这些测试提供了在测试期间没有错误的肯定答案。 根据 fuSA 的指导方针,我们需要通过注入 ECC 错误来测试 RAM 错误和 Pflash 错误
    发表于 01-31 06:39

    基型控制器的使用方法

    目前,控制器(仪表)已经很多,产品已在工程实际中得到了广泛的应用,基型控制器的使用方法如下:1.基型控制器主要性能指标基型控制器的主要技术指
    发表于 06-22 10:18

    射频/微波PCB的信号注入与优化方法

    将高频能量从同轴连接传递到印刷电路板(PCB)的过程通常被称为信号注入,它的特征难以描述。能量传递的效率会因电路结构不同而差异悬殊。PCB 材料及其厚度和工作频率范围等因素,以及连接设计及其
    发表于 08-13 16:36

    正弦信号注入PFC控制环路的方法

    谐波的任意组合,从而可抑制一个以上的谐波。可根据工作条件动态调节所注入谐波信号的幅值,从而可最大限度提高补偿效果。非常灵活的总体固件解决方案,无需其它硬件。该方法可用于任何数字控制器,包括 UCD3138 和 C2000 微处理
    发表于 09-12 09:49

    使用谐波注入法降低PFC谐波并改善THD的方法

    幅值谐波的类似方法。这种方法应该很容易使用,不仅不涉及额外的硬件成本,而且还非常灵活,可抑制任何阶数的谐波。在 TI UCD3138 等数字电源控制器的帮助下,我开发出了一种简单的谐波注入
    发表于 09-12 09:47

    一种简单的PID控制器调整方法

      在进行PID控制器工作之前,必须对其进行调整以适应要控制的过程的动态。设计者给出P,I和D项的默认值,这些值不能给出期望的性能,有时会导致不稳定性和缓慢的控制性能。开发了不同类型的调节方法
    发表于 09-01 17:58

    ADC控制器功能

    ADC(Analog-to-Digital Converter)STM32F10xADC特点12位(位数决定精度)逐次逼近型的模拟数字转换。最多带3个ADC控制器(每个控制器有多个通道)最多支持
    发表于 08-12 06:59

    控制器设计

    控制器设计的目标是什么?控制器的输入输出是什么?控制器的结构应该怎么设计?接下来的几篇内容将以多旋翼飞行为例,介绍PID控制
    发表于 09-07 07:54

    基于信号注入的永磁同步电机控制方法

    本文介绍了一种基于脉动高频电压信号注入法实现面装式永磁同步电机无传感器控制方法。利用面装式永磁同步电机的磁饱和效应,在和转子同速旋转的坐标系注入脉动高频电压
    发表于 05-26 10:00 25次下载

    基于信号注入的永磁同步电机控制方法

    本文介绍了一种基于脉动高频电压信号注入法实现面装式永磁同步电机无传感器控制方法。利用面装式永磁同步电机的磁饱和效应,在和转子同速旋转的坐标系注入脉动高频电压
    发表于 12-14 17:03 19次下载

    基于信号注入的永磁同步电机控制方法

    本文介绍了一种基于脉动高频电压信号注入法实现面装式永磁同步电机无传感器控制方法。利用面装式永磁同步电机的磁饱和效应,在和转子同速旋转的坐标系注入脉动高频电压信
    发表于 07-20 14:45 14次下载

    离子注入设备和方法

    离子注入设备和方法:最简单的离子注入机(图2)应包括一个产生离子的离子源和放置待处理物件的靶室。
    发表于 05-22 12:29 7378次阅读
    离子<b class='flag-5'>注入</b>设备和<b class='flag-5'>方法</b>

    基于模糊PID控制器控制方法研究_王述彦

    基于模糊PID控制器控制方法研究_王述彦
    发表于 02-08 01:58 0次下载

    H桥级联型SVG控制方法控制器的研究

    H桥级联型SVG控制方法控制器的研究
    发表于 11-08 17:07 0次下载