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

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

    关注

    114

    文章

    17168

    浏览量

    184946
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

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

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

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

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

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

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

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

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

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

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

    NandFlash控制器的FPGA实现方法技巧

    NandFlash控制器的FPGA实现方法技巧与程序案例分享。
    发表于 09-21 09:40 ?78次下载

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

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

    PID控制器设计与参数整定方法综述

    PID控制器设计与参数整定方法综述-2005
    发表于 03-31 17:46 ?27次下载

    电动汽车用电机控制器设计方法与实践

    电动汽车用电机控制器设计方法与实践
    发表于 02-08 02:03 ?54次下载

    基于分数阶微积分的PID控制器方法

    随着分数阶理论研究的不断发展,分数阶控制器方法不仅可以改善系统动态响应特性,而且可以获得优越于传统PID控制器方法,分数阶微积分控制器增加了
    发表于 11-09 17:26 ?20次下载
    基于分数阶微积分的PID<b class='flag-5'>控制器</b><b class='flag-5'>方法</b>

    门禁控制器常见故障排除方法

    本文开始介绍了什么是门禁控制器和门禁控制器主要分类,其次介绍了门禁系统出现故障并且排除的四大方法,最后介绍了门禁控制器常见故障排除。
    发表于 01-19 08:41 ?4.7w次阅读
    门禁<b class='flag-5'>控制器</b>常见故障排除<b class='flag-5'>方法</b>

    基于模糊PID控制器的VRV空调系统设计方法

    基于模糊PID控制器的VRV空调系统设计方法
    发表于 07-01 16:08 ?3次下载

    无叶风扇控制器怎么调 无叶风扇控制器怎么接线

    无叶风扇控制器是一种新型的风扇控制设备,以其独特的设计和革新的风扇技术而备受关注。无叶风扇控制器通过轴流风扇和特殊的进风口设计,将空气吸入并加速,然后通过喷口进行注入和加热。与传统的叶
    的头像 发表于 01-24 16:51 ?3168次阅读

    压力控制器的正确接线方法

    压力控制器是一种用于监测和控制压力的自动化设备,广泛应用于工业、科研和民用领域。正确接线是确保压力控制器正常工作的关键。本文将详细介绍压力控制器的接线
    的头像 发表于 06-19 10:46 ?5926次阅读

    瞬态响应与纹波——迟滞控制器中使用的纹波注入技术分析

    电子发烧友网站提供《瞬态响应与纹波——迟滞控制器中使用的纹波注入技术分析.pdf》资料免费下载
    发表于 10-09 14:34 ?1次下载
    瞬态响应与纹波——迟滞<b class='flag-5'>控制器</b>中使用的纹波<b class='flag-5'>注入</b>技术分析