您的位置:首页 > 运维架构 > 网站架构

系统学习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


这一节的内容中,要实现的是:使用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文件中的一个地方就可以了。而不用再去修改控制器中的代码。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐