系统学习MVC3搭建网站(4)--利用NuGet安装Ninject.MVC3实现依赖注入(DI)
通过一个简单的文章系统学习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
这一节的内容中,要实现的是:使用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

如果你看不到这个选项,请首先安装nuget
http://www.nuget.org/
http://visualstudiogallery.msdn.microsoft.com/27077b70-9dad-4c64-adcf-c7cf6bc9970c
如果安装后提示Error: The Package Manager Console requires PowerShell 2.0 runtime.....
到这个地址下载安装 Windows 管理框架, Windows7中,默认已经包含了这个软件,如果你是其它系统,则可能需要安装。
http://support.microsoft.com/kb/968929
(这个下载的链接不太好找,我放个图,“本页”的位置需要展开)

回到Package Manager Console

这里有两个下拉框,第一个是package源,现在看到的是ALL跟Nuget official package source两个选项,可以点击旁边的Setting图标配置更多的package源,可以是url,也可以我们的本地计算机(服务器)目录(比如前面提到的那个packages目录),这里我不做太多延伸。第二个下拉框就是需要导入插件的项目。需要注意的是,这里默认的是解决方案里的第一个项目,而不是打开Package Manager Console时的当前选中项目。
(2)查找以及安装
下面列出的几个简单的命令,更多的操作可以去Nuget网站上学习。这里其实只需要用到 install-package Ninject.MVC3
1.列出所有插件---会列出N多的可用插件来
Get-Package -ListAvailable
2.关键字过滤
Get-Package -Filter Ninject.MVC3 -ListAvailable
3.安装
install-package Ninject.MVC3
安装成功后,会自动在项目中添加了3个Ninject.MVC3相关的dll文件引用,以及添加了一个App_Start文件夹,其中生成了一个NinjectMVC3.cs代码文件



这个NinjectMVC3.cs文件即是实现“配置依赖”的位置。NinjectMVC3.cs代码:
View Code
实现“依赖注入”,非常简单。
(1)NinjectMVC3.cs的RegisterServices方法中注册依赖关系:

(2)修改控制器中代码:

实现依赖注入后,如果以后有新的需求,例如需要把IServices接口实现由ServiceImpl更改为ServiceWCFImpl,就只需要更改NinjectMVC3.cs文件中的一个地方就可以了。而不用再去修改控制器中的代码。
posted on 2012-04-06 10:47 xiaogang_self 阅读(1962) 评论(2) 收藏 举报
浙公网安备 33010602011771号