系统学习MVC3搭建网站(4)--利用NuGet安装Ninject.MVC3实现依赖注入(DI)
2012-04-06 10:47
681 查看
通过一个简单的文章系统学习MVC3+Linq搭建网站:
(1)数据库建模 (2012-03-23 12:10)
(2)如何利用系统自带的用户系统 (2012-03-28 22:41)
(3) 项目文件结构介绍 (2012-04-04 15:41)
(4) 通过NuGet安装Ninject.MVC3实现依赖注入(DI)。 (2012-04-05 22:51)
源码 数据库创建sql 本示例DEMO
(1)数据库建模 (2012-03-23 12:10)
(2)如何利用系统自带的用户系统 (2012-03-28 22:41)
(3) 项目文件结构介绍 (2012-04-04 15:41)
(4) 通过NuGet安装Ninject.MVC3实现依赖注入(DI)。 (2012-04-05 22:51)
源码 数据库创建sql 本示例DEMO
这一节的内容中,要实现的是:使用NuGet安装Ninject.MVC3实现该项目程序控制层Controllers与模型层Models之间的依赖注入(DI)。
这里面有3个概念,接下来我会依次予以说明。
1.依赖注入
2.Ninject.MVC3
3.NuGet
1.什么是依赖注入?
依赖注入(Dependency Injection,简称DI),通常还会有控制反转(Inversion of Control,简称IoC),依赖倒置(Dependency Inversion Principle),基本上他们算是一回事,伴随着的还有“耦合","解耦"的概念。“耦合"是一个什么样的表现?我们回到上一节末尾的代码。
Models层,分别定义了一个IServices.cs接口,以及接口方法实现类ServiceImpl。
public interface IServices { string xxx(); } public partial class ServiceImpl : IServices { public string xxx(){xxxxx;}; }
复制代码
Controllers层,需要调用Models的方法:
public IServices cmsService { get; set; } protected override void Initialize(RequestContext requestContext) { if (cmsService == null) { cmsService = new ServiceImpl(); } base.Initialize(requestContext); }
复制代码
在Controllers层定义了一个IServices接口类型对象,然后New一个ServiceImpl实例。这里也确实体现了面向接口编程的概念,假如除了ServiceImpl外,还有ServiceWebServiceImpl,ServiceWebWCFImpl,ServiceJSONImpl等其它IServices接口实现类。需要更改数据的实现方式时,则只需要New对应的类的实例即可。
糟糕的是我们必须回到每一个控制器页面来修改它们。显然这很麻烦。类与类之间的调用关系称为“依赖”,把这种通过new一个类的实例实现调用的方式称之为“硬编码”,那么,“依赖注入”所要解决的的问题就是取代这种硬编码的方法,把耦合的代码解耦,把彼此的依赖关系从程序中剥离出来,放到一个第三方对象中,我们把这个第三方对象称为IoC容器,通过IoC容器来管理对象的生命周期、依赖关系等,从而使得应用程序的配置和依赖性规范与实际的应用程序代码分开。
Ninject就是接下来要介绍的IoC容器,一个依赖注入实现工具。
首先需要安装Ninject插件。这里先引入另外一个工具NuGet。
传统的添加dll的方式是先下载,解压,然后添加引用。如果只是一个dll文件看起来也没有多麻烦,但有时候一个功能可能会涉及到多个dll文件,甚至其它cs文件等,这时候传统的方式就会比较麻烦。如果采用NuGet,它具备下面的一些优点:
1.dll的配置可以自动添加
2.添加一个dll后,它会自动把相关联的dll给添加到引用中来
3.当有新的版本出现时可以自动更新dll
4.如果需要在web.config中添加一些配置属性,它会自动完成
事实上,从我们开始接触MVC3起就已经在接触NuGet了。你可能会疑惑在我们的解决方案文件夹下里面有一堆jquery系列,EntityFramework等文件夹的packages目录是干什么的?他们就是NuGet安装包,.nupkg后缀的压缩文件包含了该插件安装的所有文件。
操作:
(1)点击Package Manager Console
View Code
实现“依赖注入”,非常简单。
(1)NinjectMVC3.cs的RegisterServices方法中注册依赖关系:
(2)修改控制器中代码:
实现依赖注入后,如果以后有新的需求,例如需要把IServices接口实现由ServiceImpl更改为ServiceWCFImpl,就只需要更改NinjectMVC3.cs文件中的一个地方就可以了。而不用再去修改控制器中的代码。
相关文章推荐
- 通过一个简单的文章系统学习MVC3+Linq搭建网站(1)
- 系统学习MVC3+Linq搭建网站--项目文件结构介绍(3)
- spring01 环境搭建、控制反转、依赖注入、springIOC和DI实现MVC模式
- 利用ASP.netCore自带DI(DependencyInjection)实现批量依赖注入
- 【干货】利用MVC5+EF6搭建博客系统(二)测试添加数据、集成Autofac依赖注入
- 通过一个简单的文章系统学习MVC3+Linq搭建网站--项目文件结构介绍(3)
- ASP.NET Core 2.0系列学习笔记-DI依赖注入
- Spring -Spring的 DI - 依赖注入的 使用学习
- 从零开始,搭建博客系统MVC5+EF6搭建框架(2),测试添加数据、集成Autofac依赖注入
- 原创:Javascript DI!Angular依赖注入的实现原理
- Asp.Net Core 项目实战之权限管理系统(4) 依赖注入、仓储、服务的多项目分层实现
- 基于Spring+SpringMVC+Hibernate框架系统, 利用SpringAOP实现写日志,切入点的Controller层出现@AutoWire 注入Service为null的情况分析
- 在MVC3项目中结合NInject组件实现依赖注入的设计
- 系统学习MVC3+Linq搭建网站--如何利用系统自带的用户系统(2)
- 搭建Windows系统下php开发环境有很多种方式,比如LAMP的配置、php IDE和调试工具的选择等等。根据每个人喜好不同有很多配置方式。这里主要介绍的是利用XAMPP集成安装和配置apache、
- 新手学习在Ubuntu 14.04搭建Javaweb网站(4)--安装JDK
- 基于Vue实现微信三公棋牌网站搭建后台系统权限控制
- Win7系统下利用U盘安装Ubuntu_12.04实现双系统教程
- 从零开始写javaweb框架笔记15-搭建轻量级JAVAWEB框架-实现依赖注入功能
- android平台搭建学习 02---界面中列表的实现(天气预报系统)