在 mvc 4 中使用 unity 进行依赖注入

关于依赖注入的概念,这里就不再叙述了,我们用 mvc 4 结合 unity,使用构造函数来进行依 赖注入。具体步骤如下: 1. 首先建立 一个 mvc 项目, 选择 basic

创建好后,完整的项目应该是这样的:

2. 创建 Home控制器, 并添加 index 视图

3.创建 UserInfo 类, 和 Iuser 接口以及 UserService类,UserService 实现Iuser 接口中 的方法, 其中的业务逻辑自己可以根据具体的情况来实现

4.打开 Nuget 程序管理包, 在搜索框中输入 unity ,并下载安装,具体如下图:

5. 创建一个 依赖解析容器,并实现接口IDependencyResolver 中两个重要的方法 object GetService(Type serviceType) IEnumerable<object> GetServices(Type serviceType) 这两个方法就是返回所依赖的服务的对象

 /// <summary>
   ///  Dependency Injection  Resolver Container
   /// </summary>
    public class UnityResolver : IDependencyResolver
    {
        protected IUnityContainer container;

        public UnityResolver(IUnityContainer container)
        {
            if (container == null)
            {
                throw new ArgumentNullException("container");
            }
            this.container = container;
        }

        public object GetService(Type serviceType)
        {
            try
            {
                return container.Resolve(serviceType);
            }
            catch (ResolutionFailedException)
            {
                return null;
            }
        }

        public IEnumerable<object> GetServices(Type serviceType)
        {
            try
            {
                return container.ResolveAll(serviceType);
            }
            catch (ResolutionFailedException)
            {
                return new List<object>();
            }
        }

    }

6. 在 app_start 中添加一个 unityConfig 配置文件

在这个文件中声明一个静态的没有返回值的方法,RegisterComponents,实例化一个解析容器  (也是刚才所添加的解析容器),然后将所依赖的接口和实现类在这里进行注册。  container.RegisterType<IUserInfo, UserInfoService>( new  HierarchicalLifetimeManager());  最后调用 DependencyResolver对象的 SetResolver方法 来保存刚才的注册。

public static void RegisterComponents()
        {
			var container = new UnityContainer();

            // register all your components with the container here
            // it is NOT necessary to register your controllers
            // e.g. container.RegisterType<ITestService, TestService>();

            container.RegisterType<IUserInfo, UserInfoService>( new HierarchicalLifetimeManager());

            DependencyResolver.SetResolver(new UnityResolver(container));

        }

7. 在 global.cs 中注册 UnityConfig 配置文件

   UnityConfig.RegisterComponents();

8. 在Home 控制器中使用构造函数注入

      IUserInfo userinfoService;
      public HomeController( IUserInfo userinfoService)
      {
        // 依赖注入
        this.userinfoService = userinfoService;
      }

重新生成一下项目,如果没有错误,启动运行,我们将会看到样的界面:

源码下载: 下载源码

时间: 2024-10-04 08:37:54

在 mvc 4 中使用 unity 进行依赖注入的相关文章

在ASP.NET MVC中使用Unity进行依赖注入的三种方式

在ASP.NET MVC4中,为了在解开Controller和Model的耦合,我们通常需要在Controller激活系统中引入IoC,用于处理用户请求的 Controller,让Controller依赖于ModelRepository的抽象而不是它的实现. 我们可以在三个阶段使用IoC实现上面所说的解耦操作,首先需要简单介绍一下默认情况下Controller的激活过程: 1.用户发送请求黑ASP.NET,路由系统对请求进行解析,根据注册的路由规则对请求进行匹配,解析出Controller和Ac

在mvc中使用Ninject进行依赖注入

说到依赖注入 ,首先要提到控制反转,控制反转(Inversion of Control,英文缩写为IoC)是一个重要的面向对象编程的原则,目的是来削减计算机程序的耦合问题控制反转一般分为两种类型, 依赖注入(Dependency Injection,简称DI)和依赖查找.两者的区别在于,前者是被动的接收对象,在类A的实例创建过程中即创建了依赖的B对象,通过类型或名称来判断将不同的对象注入到不同的 属性中,而后者是主动索取响应名称的对象,获得依赖对象的时间也可以在代码中自由控制.但是依赖注入的应用

Unity 之依赖注入

什么是Unity? Unity是一个轻量级的可扩展的依赖注入容器,支持构造函数,属性和方法调用注入.Unity可以处理那些从事基于组件的软件工程的开发人员所面对的问题.构建一个成功应用程序的关键是实现非常松散的耦合设计.松散耦合的应用程序更灵活,更易于维护.这样的程序也更容易在开发期间进行测试.你可以模拟对象,具有较强的具体依赖关系的垫片(轻量级模拟实现),如数据库连接,网络连接,ERP连接,和丰富的用户界面组件.例如,处理客户信息的对象可能依赖于其他对象访问的数据存储,验证信息,并检查该用户是

运用Unity实现依赖注入[结合简单三层实例]

一:理论部分 依赖注入:这是 Ioc 模式的一种特殊情况,是一种基于改变对象的行为而不改变类的内部的接口编程技术.开发人员编写实现接口的类代码,并基于接口或者对象类型使用容器注入依赖 的对象实例到类中.用于注入对象实例的技术是接口注入.构造函数注入.属性(设置器)注入和方法调用注入. Unity是微软企业库一部分,是一个轻量级.可扩展的依赖注入容器,支持构造函数.属性和方法调用注入: 针对依赖注入以前我也写过一篇结合三层的文章:spring.net 结合简单三层实例 二:实例简介 1:本实例将通

运用Unity实现依赖注入[有参构造注入]

上一篇章讲到关于使用Unity实现依赖注入的简单功能,针对有博友提出关于有参构造注入的问题; 本文同样通过一个实例来讲解如何实现此功能,文中一些分层讲解可以看上一文章(运用Unity实现依赖注入[结合简单三层实例]),本文就不在重复; 1:首先我们在IAopBLL层新建一个IPropertyBLL类,我们增加的两个属性:name跟age namespace IAopBLL { public interface IPropertyBLL { string name { set; get; } in

Entity Framework 实体框架的形成之旅--利用Unity对象依赖注入优化实体框架(2)

在本系列的第一篇随笔<Entity Framework 实体框架的形成之旅--基于泛型的仓储模式的实体框架(1)>中介绍了Entity Framework 实体框架的一些基础知识,以及构建了一个简单的基于泛型的仓储模式的框架,例子也呈现了一个实体框架应用的雏形,本篇继续介绍这个主题,继续深化介绍Entity Framework 实体框架的知识,以及持续优化这个仓储模式的实体框架,主要介绍业务逻辑层的构建,以及利用Unity和反射进行动态的对象注册. 1.EDMX文件位置的调整 我们从上篇例子,

AngularJS学习--- AngularJS中XHR(AJAX)和依赖注入(DI) step5

前言:本文接前一篇文章,主要介绍什么是XHR,AJAX,DI,angularjs中如何使用XHR和DI. 1.切换工具目录 git checkout -f step-5 #切换分支 npm start #启动项目 2.什么是XHR和依赖注入(Dependency Injection)? 1)什么是XHR? XHR是XMLHttpRequest的简称,XMLHttpRequest 用于在后台与服务器交换数据,主要是为了实现在不重新加载整个网页的情况下,对网页的某部分进行更新.简单说,浏览器中URL

【ASP.Net MVC3 】使用Unity 实现依赖注入

什么是Unity? Unity是一个轻量级的可扩展的依赖注入容器,支持构造函数,属性和方法调用注入.Unity可以处理那些从事基于组件的软件工程的开发人员所面对的问题.构建一个成功应用程序的关键是实现非常松散的耦合设计.松散耦合的应用程序更灵活,更易于维护.这样的程序也更容易在开发期间进行测试.你可以模拟对象,具有较强的具体依赖关系的垫片(轻量级模拟实现),如数据库连接,网络连接,ERP连接,和丰富的用户界面组件.例如,处理客户信息的对象可能依赖于其他对象访问的数据存储,验证信息,并检查该用户是

Unity轻量级依赖注入容器

一.前言 Unity是一个轻量级的可扩展的依赖注入容器,支持构造函数,属性和方法调用注入.在Nuget里安装unity 二.Unity的API方法 UnityContainer.RegisterType<ITFrom,TTO>();  //注册映射 UnityContainer.RegisterType< ITFrom, TTO >("keyName");//注册映射指定key值 IEnumerable<T> databases = UnityCon