本人主要是写给我自己看的,文章没有过多的解释,只留下步骤。

目的:面向接口编程,做到低耦合,高内聚

1.利用Nuget 管理工具,安装Ninject。

2.随便新建一个接口和一个实现类,我在此项目中是新建了一个ITextHelper接口和TextHelper实现类,定义方法GetString,代码代码如下。

public class TextHelper:ITextHelper
{
public string GetString(string text)
{
return text;
}
}

2.新建一个NinjectControllerFactory类,并继承DefaultControllerFactory(用来实例化控制器的工厂类),注意DefaultControllerFactory是在System.Web.Mvc的命名空间下面的,注册绑定ITextHelper与TextHelper的关系,并重写GetControllerInstance方法,代码如下:

 public class NinjectControllerFactory : DefaultControllerFactory
{
IKernel ninjectKernel;
public NinjectControllerFactory()
{
ninjectKernel = new StandardKernel();
ninjectKernel.Bind<Services.ITextHelper>().To<Services.TextHelper>();
}
protected override IController GetControllerInstance(System.Web.Routing.RequestContext requestContext, Type controllerType)
{
return controllerType == null ? null : (IController)ninjectKernel.Get(controllerType);
}
}

3.新建一个TextController控制器,在TextController的构造函数里面,将ITextHelper 对象作为参数传进来,因为NinjectControllerFactory工厂类已经实例化了TextHelper对象,

在这里,你可以看到这里面只能看到ITextHelper,并看不到 ITextHelper的实现类,下次要修改啥业务,就不用动控制器了,完全做到分离,这样是不是变得更好维护了?!。

    public class TextController : Controller
{
ITextHelper txtHelper; public TextController(ITextHelper txtHelper)
{
this.txtHelper = txtHelper;
} public ActionResult Index()
{
ViewBag.Str = txtHelper.GetString("高内聚,低耦合");
return View();
} }

4.新建一个视图index.cshtml,

@{
Layout = null;
} <!DOCTYPE html> <html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Index</title>
</head>
<body>
<div>
@ViewBag.Str(这是来自服务器的消息)
</div>
</body>
</html>

5.最后一步,在Global.asax 的Application_Start方法里面设置我们自定义的控制器工厂,其实就是加一行代码:

ControllerBuilder.Current.SetControllerFactory(new Factory.NinjectControllerFactory());

protected void Application_Start()
{ AreaRegistration.RegisterAllAreas(); WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes); ControllerBuilder.Current.SetControllerFactory(new Factory.NinjectControllerFactory());
}

运行:

MVC 依赖注入的更多相关文章

  1. 基础教程:视图中的ASP.NET Core 2.0 MVC依赖注入

    问题 如何在ASP.NET Core MVC Views中注入和使用服务. 解 更新 启动 类来为MVC添加服务和中间件. 添加一项服务 添加一个Controller,返回 ViewResult. 添 ...

  2. MVC 依赖注入扩展

    需求: 小明想要完成一个功能F,需要一把锤子T. 有两种办法可以实现: 1)小明很爱动手,精力很旺盛,于是,自己创建一个具有功能F的锤子T,并使用T来完成F: 2)小明很懒,天天睡大觉,于是,他叫小健 ...

  3. asp.net mvc 依赖注入Ninject

    1.安装Ninject 2.使用Ninject 一 安装Ninject Nuget:Ninject 二 使用Ninject public interface IStudent { string Get ...

  4. .NET MVC 依赖注入 来龙去脉

    找了很久,找到一篇好文章,细读很有收获: 点击打开链接http://www.codeproject.com/Articles/560798/ASP-NET-MVC-Controller-Depende ...

  5. MVC 依赖注入/控制反转

    http://www.cnblogs.com/cnmaxu/archive/2010/10/12/1848735.html http://www.cnblogs.com/artech/archive/ ...

  6. WebAPI2使用AutoFac依赖注入完整解决方案。

    WebApi2上进行依赖注入,在百度里能搜到的的完整解决方案的文章少之又少,缺胳膊断腿. 和MVC5依赖注入的不同之处,并且需要注意的地方,标记在注释当中.上Global代码: namespace S ...

  7. ASP.NET Core 中文文档 第四章 MVC(3.8)视图中的依赖注入

    原文:Dependency injection into views 作者:Steve Smith 翻译:姚阿勇(Dr.Yao) 校对:孟帅洋(书缘) ASP.NET Core 支持在视图中使用 依赖 ...

  8. .Net Core MVC 网站开发(Ninesky) 2.3、项目架构调整-控制反转和依赖注入的使用

    再次调整项目架构是因为和群友dezhou的一次聊天,我原来的想法是项目尽量做简单点别搞太复杂了,仅使用了DbContext的注入,其他的也没有写接口耦合度很高.和dezhou聊过之后我仔细考虑了一下, ...

  9. ASP.NET Core 中文文档 第四章 MVC(4.4)依赖注入和控制器

    原文: Dependency Injection and Controllers 作者: Steve Smith 翻译: 刘浩杨 校对: 孟帅洋(书缘) ASP.NET Core MVC 控制器应通过 ...

随机推荐

  1. 关于mac环境下删除cocos2d-x环境变量配置的方法

    yangchaodeMacBook-Air:downloads yangchao$ vim ~/.bash_profile

  2. 第一次配置Android环境

    配置Android环境,相信很多人都做过,而且网上的资料也一大堆,我就来分享一下我配置Android的心得吧! 第一步:下载好需要的文件:Android SDK.JDK.Eclipse.ADT ps: ...

  3. 第一章 Mysql 简介及安装和配置

    Mysql是最流行的关系型数据库管理系统,在WEB应用方面MySQL是最好的RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一. ...

  4. [瞎JB写] C++多态

    似乎只能通过引用或者指针进行动态多态...蛋疼的语法 #include <iostream> #include <vector> #include <memory> ...

  5. sublime学习

    1:goto anything 特性 快捷键  ctrl + P    @  : # 使用 2:多行游标功能 快捷键 ctrl + D     ctrl + K 跳过选择 alt + F3 多选 产生 ...

  6. hadooop2.6 job pending research

    https://hadoop.apache.org/docs/r2.6.0/hadoop-project-dist/hadoop-common/ClusterSetup.html 我使用的是已经运行在 ...

  7. Design Pattern :Factory and Reflect in java

    interface page {     void Render(); } class pageA implements page {     @Override     public void Re ...

  8. SharpDX之Direct2D教程II——加载位图文件和保存位图文件

    本系列文章目录: SharpDX之Direct2D教程I——简单示例和Color(颜色) 绘制位图是绘制操作的不可缺少的一部分.在Direct2D中绘制位图,必须先利用WIC组件将位图加载到内存中,再 ...

  9. 开发一个App要多少钱?APP开发报价单,APP开发外包有哪些注意事项-广州达到信息www.ddapp.com.cn

    来源:广州达到信息著作权归广州达到信息所有.商业转载请联系作者获得授权,非商业转载请注明出处. 作为一个APP开发从业者,经常会有人问到:开发一个App要多少钱?下面针对这个问题来好好解答解答正经的谈 ...

  10. WinCE应用程序崩溃提示框的处理

    WinCE的开发人员和WinCE设备的用户应该对下面这两个错误不陌生,"Application encountered a serious error and must shut down& ...