DI 依赖注入之unity的MVC版本使用Microsoft.Practices.Unity1.2与2.0版本对比

参考:https://www.cnblogs.com/xishuai/p/3670292.html

参考:https://docs.microsoft.com/en-us/previous-versions/msp-n-p/ff660914(v=pandp.20)?redirectedfrom=MSDN#config_registerelement

必读:

在unity1.2中我们使用构造器注入、属性注入和方法注入会有parameterType节点,就是说在constructor、property和method这些节点可以配置这些方式注入所依赖的类型,但是在unity2.0并不存在parameterType节点了,所有类型注册都是通过register节点进行配置的,相当于unity1.2中的type节点,虽然unity2.0存在constructor、property和method节点,但我感觉只是针对构造器、属性和方法本身进行注入。另外在unity2.0配置中alias节点下的生命管理周期配置并不需要了。

一.下载安装:

Microsoft.Practices.Unity.dll

Microsoft.Practices.Unity.Configuration.dll

下载地址:

二.配置:

1.在App_Start文件夹下创建UnityConfig.cs文件

using Microsoft.Practices.Unity;
using Microsoft.Practices.Unity.Configuration;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using ZLP.BLL;
using ZLP.DAL;
using ZLP.IBLL;
using ZLP.IDAL;
using ZLP.MVC.Controllers; namespace ZLP.MVC
{
public class UnityConfig
{
public static void RegisterComponents()
{
var container = new UnityContainer(); //代码注入
// container.RegisterType<IUserDAL, UserDAL>();
//container.RegisterType<IUserBLL, UserBLL>(); //配置文件注入
var section=(UnityConfigurationSection)ConfigurationManager.GetSection(UnityConfigurationSection.SectionName);
section.Configure(container); DependencyResolver.SetResolver(new ZLPDependencyResolver(container));
}
}
}

2.在App_Start文件夹下创建ZLPDependencyResolver.cs文件(创建一个实现IDependencyResolver的类)

using Microsoft.Practices.Unity;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc; namespace ZLP.MVC
{
public class ZLPDependencyResolver : IDependencyResolver
{
public ZLPDependencyResolver(IUnityContainer container)
{
this.container = container;
}
IUnityContainer container;
public object GetService(Type serviceType)
{
try
{
return this.container.Resolve(serviceType);
}
catch (Exception)
{ return null;
}
} public IEnumerable<object> GetServices(Type serviceType)
{
try
{
return this.container.ResolveAll(serviceType);
}
catch (Exception)
{
return Enumerable.Empty<object>();
}
}
}
}

3.在Global文件中Application_Start方法中增加一行代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Optimization;
using System.Web.Routing; namespace ZLP.MVC
{
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
UnityConfig.RegisterComponents();//增加unity的方法调用
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Optimization;
using System.Web.Routing; namespace ZLP.MVC
{
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
UnityConfig.RegisterComponents();//增加unity的方法调用
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Optimization;
using System.Web.Routing; namespace ZLP.MVC
{
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
UnityConfig.RegisterComponents();//增加unity的方法调用
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
}
}

三.配置文件:

版本:1.2

1.2中的节点:

  <configSections>
<section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Microsoft.Practices.Unity.Configuration"/>
</configSections>
<unity>
<typeAliases>
<typeAlias alias="IUserBLL" type="ZLP.IBLL.IUserBLL,ZLP.IBLL" />
<typeAlias alias="UserBLL" type="ZLP.BLL.UserBLL,ZLP.BLL" />
</typeAliases>
<containers>
<container name="defaultContainer">
<type type="IUserBLL" mapTo="UserBLL" name="a"></type >
</container>
</containers>
</unity>

版本:2.0

2.0中节点变更为如下:

  • The <unity> Configuration Section
  • The <container> Element
  • The <register> Element
  • The <lifetime> Element
  • The <constructor> Element
  • The <property> Element
  • The <method> Element
  • The <param> Element
  • The <dependency> Element
  • The <value> Element
  • The <optional> Element
  • The <array> Element
  • The <extension> Element
  • The <instance> Element
  • The <namespace > Element
  • The <alias> Element
  • The <sectionExtension> Element
    • <configSections>
      <section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Microsoft.Practices.Unity.Configuration" />
      </configSections>
      <unity>
      <alias alias="IUserDAL" type="ZLP.IDAL.IUserDAL,ZLP.IDAL" />
      <alias alias="UserDAL" type="ZLP.DAL.UserDAL,ZLP.DAL" />
      <alias alias="IUserBLL" type="ZLP.IBLL.IUserBLL,ZLP.IBLL" />
      <alias alias="UserBLL" type="ZLP.BLL.UserBLL,ZLP.BLL" />
      <container>
      <register type="IUserDAL" mapTo="UserDAL"></register>
      <register type="IUserBLL" mapTo="UserBLL"></register>
      </container>
      </unity>
  • 详细的查看官方地址:https://docs.microsoft.com/en-us/previous-versions/msp-n-p/ff660914(v=pandp.20)?redirectedfrom=MSDN#config_registerelement

DI 依赖注入之unity的MVC版本使用Microsoft.Practices.Unity1.2与2.0版本对比的更多相关文章

  1. DI 依赖注入之unity(mvc)

    DI 依赖注入之unity(使用unity.mvc) 一.nuget下载安装: 使用Nuget安装Unity.MVC 安装完成后会在~/App_Start/目录下自动生成UnityMvcActivat ...

  2. AutoFac IoC DI 依赖注入

    AutoFac IoC DI 依赖注入 记录点点滴滴知识,为了更好的服务后来者! 一.为什么使用AutoFac? 之前介绍了Unity和Ninject两个IOC容器,但是发现园子里用AutoFac的貌 ...

  3. DI 依赖注入之StructureMap框架

    DI  依赖注入之StructureMap框架 一.简叙: structureMap只是DI框架中的其中之一. 二.安装及使用: 1.懒人方法: 使用MVC5项目时,可以直接在nuget程序包中安装S ...

  4. 控制反转、依赖注入、Unity容器

    控制反转原则 依赖注入 Install-Package Unity:https://www.nuget.org/packages/Unity/ Github:https://github.com/un ...

  5. 谈谈php里的IOC控制反转,DI依赖注入

    理论 发现问题 在深入细节之前,需要确保我们理解"IOC控制反转"和"DI依赖注入"是什么,能够解决什么问题,这些在维基百科中有非常清晰的说明. 控制反转(In ...

  6. 依赖注入与Unity(一) 介绍

        在你学习依赖注入和Unity之前,你需要明白你为什么要使用它们.为了明白为什么要使用它们,你应该明白依赖注入和Unity能够帮助你解决什么类型的问题.作为介绍部分,这一章不会涉及太多关于Uni ...

  7. 【依赖注入】Unity和Autofac

    全面理解ASP.NET Core依赖注入:https://www.cnblogs.com/jesse2013/p/di-in-aspnetcore.html MSDN:https://docs.mic ...

  8. IoC 依赖注入容器 Unity

    原文:IoC 依赖注入容器 Unity IoC 是什么? 在软件工程领域,“控制反转(Inversion of Control,缩写为IoC)”是一种编程技术,表述在面向对象编程中,可描述为在编译时静 ...

  9. 依赖注入之unity(winform方式)

    依赖注入之unity(winform方式) 要讲unity就必须先了解DI和IOC及DIP,如下链接提供DI和IOC的基础:https://www.cnblogs.com/zlp520/p/12015 ...

随机推荐

  1. Ajax实现附件上传

    前两篇文章有介绍使用form.submit 实现附件的上传,但是这种方式使用起来很不方便,如过需要再上传成功以后执行一些其他的操作的时候比较麻烦.下面我为大家介绍下使用ajax实现附件上传的功能: 1 ...

  2. java DES转C#DES加密解密

    一个程序用到java的cn.core.jar加密的,需要在.NET 中解密,发现JAVA的des算法与C#的有点区别. 自己不太懂加密解密算法,所以找了个省事的方法,用IKVM.NET,用这个将cn. ...

  3. 深入理解Session和Cookie的区别

    Cookie简介 Cookie意为“甜饼”,是由W3C组织提出,最早由Netscape社区发展的一种机制. 目前Cookie已经成为标准,所有的主流浏览器如IE.Netscape.Firefox.Op ...

  4. Java自学-I/O 字节流

    Java 字节流 InputStream OutputStream InputStream字节输入流 OutputStream字节输出流 用于以字节的形式读取和写入数据 步骤 1 : ASCII码 所 ...

  5. C# 构造基础返回值类型-BaseResponse

    学无止境,精益求精 十年河东,十年河西,莫欺少年穷 用于基础返回值类型,如下: using System; using System.Collections.Generic; using System ...

  6. 浅谈Vue.js2.0核心思想

    Vue.js是一个提供MVVM数据双向绑定的库,专注于UI层面,核心思想是:数据驱动.组件系统. 数据驱动: Vue.js数据观测原理在技术实现上,利用的是ES5Object.defineProper ...

  7. nginx rewrite模块

    return 从0.8.42版本开始, return 语句可以指定重定向 url (状态码可以为如下几种 301,302,303,307), 也可以为其他状态码指定响应的文本内容,并且重定向的url和 ...

  8. Android 工作流提交审批填写审批意见PopWindow工具类

    公司的项目中几乎都会有走工作流这个环节,为了提高效率,现在特意把弹出的填写审批意见PopWindow改转成工具类,提高效率,免得下次又得整.先看运行效果.

  9. Centos7 安装配置 Rabbitmq Cluster

    Rabbitmq介绍 RabbitMQ是由 LShift 提供的一个 Advanced Message Queuing Protocol (AMQP) 的开源实现,由以高性能.健壮以及可伸缩性出名的 ...

  10. office viso 2007根据现有数据库建立数据库模型图

    当数据库表很多的时候,表之间的关系就变得很复杂.光凭记忆很难记住,尤其是数据库键值没有外键约束时. 所以有个数据库模型图各个表之间的关系就显而易见了. 打开 office viso 2007 文件&g ...