架构师_程序员_码农网

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

搜索
查看: 17208|回复: 0

[ASP.NET] asp.net mvc 使用ninject实现ioc依赖注入

[复制链接]
发表于 2016-10-14 16:46:57 | 显示全部楼层 |阅读模式
首先,安装Ninject框架,Nuget命令如下:

  1. Install-Package Ninject
复制代码


创建一个接口:

  1. public interface IFileInfoRepository : IBaseRepository<FileInfoModel>
  2.     {
  3.         FileInfoModel Get(string md5, string sha256);
  4.     }
复制代码


然后去实现这个接口:

  1. public class FileInfoService : IFileInfoRepository
  2.     {
  3.         public FileInfoModel Get(string md5, string sha256)
  4.         {
  5.             ......
  6.         }
  7.     }
复制代码


我们在WebUI工程下创建一个名为Infrastructure的文件夹,在该文件夹中添加一个名为NinjectControllerFactory的工厂类,代码如下:

  1. public class NinjectControllerFactory : DefaultControllerFactory
  2.     {
  3.         private IKernel ninjectKernel;

  4.         public NinjectControllerFactory()
  5.         {
  6.             ninjectKernel = new StandardKernel();
  7.             AddBindings();
  8.         }

  9.         protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType)
  10.         {
  11.             return controllerType == null ? null : (IController)ninjectKernel.Get(controllerType);
  12.         }

  13.         private void AddBindings()
  14.         {
  15.             // todo:后面再来添加绑定
  16.             ninjectKernel.Bind<IFileInfoRepository>().To<FileInfoService>();
  17.         }
  18.     }
复制代码


上面代码中的 ninjectKernel.Get(controllerType) 可获取到一个Controller实例。在这里如果手动实例化Controller类是一个非常复杂的过程,我们不知道Controller类有没有带参数的构造函数,也不知道构造函数的参数是什么类型。而使用Ninject只需要使用上面的一个Get方法就可以,Ninject内部会自动处理所有的依赖关系,智能地创建我们需要的对象。

Controller工厂类创建好后,我们就需要告诉MVC用我们的NinjectControllerFactory类来创建Controller对象,为此,需在Global.asax文件的Application_Start方法中添加下面代码:


  1. protected void Application_Start() {
  2.     ......

  3.     //设置Controller工厂
  4.     ControllerBuilder.Current.SetControllerFactory(new NinjectControllerFactory());
  5. }
复制代码


我们在控制器文件夹Controllers新建一个类ControllerBase,代码如下:

  1. public class ControllerBase : Controller
  2.     {
  3.         [Ninject.Inject]
  4.         public IFileInfoRepository IFileInfoRepository { get; set; }

  5.     }
复制代码


然后,我们修改控制器,让控制器集成ControllerBase这个类,ok,搞定!






上一篇:c# 计算文件的SHA256值
下一篇:安装vsftp流程整理
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:help@itsvse.com

QQ|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2026-10-16 23:29

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表