一、简介

Unity是一个轻量级的可扩展的依赖注入容器,支持构造函数,属性和方法调用注入。Unity可以处理那些从事基于组件的软件工程的开发人员所面对的问题。构建一个成功应用程序的关键是实现非常松散的耦合设计。

二、使用

1、安装 Unity插件。

进入NuGet,输入Unity。在相应的项目安装。

2、config中代码配置。

在configSections中加入
    <section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Microsoft.Practices.Unity.Configuration" />
  
在configuration中加入
  <unity  xmlns="http://schemas.microsoft.com/practices/2010/unity">
    <container>
      <register type="testunity.Models.IBook,testunity" mapTo="testunity.Models.ABook, testunity" />
    </container>
  </unity>
注意: type="testunity.Models.IBook,testunity" mapTo="testunity.Models.ABook, testunity" 
         testunity.Models.IBook是命名空间加类名
         testunity是程序集的名称

3、把container封装到一个单列类中

  1.  /// <summary>
    /// 依赖注入对象
    /// </summary>
    public class DIEntity:IDisposable
    {
    private static readonly DIEntity instance;
    private IUnityContainer container;
    /// <summary>
    /// 单例私有静态锁
    /// </summary>
    private static object unityLock = new object(); private DIEntity()
    {
    //注入配置对象
    UnityConfigurationSection section = (UnityConfigurationSection)ConfigurationManager.GetSection(UnityConfigurationSection.SectionName);
    container = new UnityContainer();
    section.Configure(container, "unityContainer");
    }
    /// <summary>
    /// 单例
    /// </summary>
    public static DIEntity Instance
    {
    get
    {
    if (instance == null)
    {
    lock (unityLock)
    {
    if (instance == null)
    {
    return new DIEntity();
    }
    }
    }
    return instance;
    }
    }
    /// <summary>
    /// 获取注入容器
    /// </summary>
    public object GetService(Type serviceType)
    {
    return container.Resolve(serviceType);
    }
    /// <summary>
    /// 获取注入容器
    /// </summary>
    public T GetService<T>()
    {
    return container.Resolve<T>();
    } #region 资源释放相关 /// <summary>
    /// 释放资源
    /// </summary>
    public void Dispose()
    {
    Dispose(true);
    GC.SuppressFinalize(this);
    }
    /// <summary>
    /// 释放资源
    /// </summary>
    /// <param name="disposing">是否是释放托管资源</param>
    protected virtual void Dispose(bool disposing)
    {
    //暂不处理非托管资源,因为没有托管资源,这里不管是析构函数还是主动释放,都释放container
    try
    {
    container.Dispose();
    container = null;
    }
    catch (Exception ex)
    {
    throw ex;
    }
    }
    /// <summary>
    /// 析构函数,在对象不可访问时触发
    /// </summary>
    ~DIEntity()
    {
    Dispose(false);
    }
    #endregion
    }

4、使用

IRoleBll roleBll = DIEntity.Instance.GetService<IRoleBll>();

Unity依赖注入的更多相关文章

  1. Unity 依赖注入之二

    1. 构造子注入 1.1 构造子注入初级代码 container.RegisterType<IMyWork, MyWork>(new InjectionConstructor(new Bo ...

  2. Unity依赖注入使用详解

    写在前面 构造器注入 Dependency属性注入 InjectionMethod方法注入 非泛型注入 标识键 ContainerControlledLifetimeManager单例 Unity注册 ...

  3. WPF PRISM开发入门二(Unity依赖注入容器使用)

    这篇博客将通过一个控制台程序简单了解下PRISM下Unity依赖注入容器的使用.我已经创建了一个例子,通过一个控制台程序进行加减乘除运算,项目当中将输入输出等都用接口封装后,结构如下: 当前代码可以点 ...

  4. C# Unity依赖注入

    简介: 控制反转:我们向IOC容器发出获取一个对象实例的一个请求,IOC容器便把这个对象实例“注入”到我们的手中,在这个过程中你不是一个控制者而是一个请求者,依赖于容器提供给你的资源,控制权落到了容器 ...

  5. Unity 依赖注入

    关于Ioc的框架有很多,比如astle Windsor.Unity.Spring.NET.StructureMap,我们这边使用微软提供的Unity做示例,你可以使用Nuget添加Unity,也可以引 ...

  6. c# Unity依赖注入WebService

    1.IOC与DI简介 IOC全称是Inversion Of Control(控制反转),不是一种技术,只是一种思想,一个重要的面相对象编程的法则,它能知道我们如何设计出松耦合,更优良的程序.传统应用程 ...

  7. 使用Microsoft.Practices.Unity 依赖注入

    Unity是微软Patterns & Practices团队所开发的一个轻量级的,并且可扩展的依赖注入(Dependency Injection)容器,它支持常用的三种依赖注入方式:构造器注入 ...

  8. 使用Microsoft.Practices.Unity 依赖注入 转载https://www.cnblogs.com/slardar1978/p/4205394.html

    Unity是微软Patterns & Practices团队所开发的一个轻量级的,并且可扩展的依赖注入(Dependency Injection)容器,它支持常用的三种依赖注入方式:构造器注入 ...

  9. ASP.NET MVC5+EF6+EasyUI 后台管理系统(6)-Unity 依赖注入

    系列目录 前言 为了符合后面更新后的重构系统,文章于2016-11-1日重写 本节重构一下代码,采用IOC控制反转,也就是依赖注入 您可以访问http://unity.codeplex.com/rel ...

  10. Unity 依赖注入知识点

    三种依赖注入方法,构造器注入.属性注入.方法注入 可以配置Config文件,来实现不用修改代码.需要先将接口与实体关联,然后使用时会自动加载对应实体. namespace WeChatConsole ...

随机推荐

  1. Dynamics 365 for CRM: Sitemap站点图的可视化编辑功能

    Dynamics 365 for CRM 提供了Sitemap站点图的可视化编辑功能 在之前的所有版本中,我们只能通过从系统中导出站点图的XML进行编辑后再导入(容易出错),或使用第三方的Sitema ...

  2. Java虚拟机之GC

    ⑴背景 Java堆和方法区实现类所需内存是不一样的,每个方法的多分支需要的内存也可能不一样,我们只有在运行期间才能制动创建哪些对象.这部分内存分配与回收都是动态的,而垃圾回收器所关注的就是这些这部分内 ...

  3. maven的使用(基础1)

    这是我第一次写博客,这个想法源于我的师傅对我的建议,一是与大家一起进步,二是让自己养成总结的好习惯. "如果你步入的maven的世界,你便打开了Java的另一扇大门". 这篇文章是 ...

  4. JavaScript(第十一天)【变量,作用域,内存】

    JavaScript的变量与其他语言的变量有很大区别.JavaScript变量是松散型的(不强制类型)本质,决定了它只是在特定时间用于保存特定值的一个名字而已.由于不存在定义某个变量必须要保存何种数据 ...

  5. python简单路由系统

    # 输入模块名/函数 url = input('请输入网址:') module,func = url.split('/') m = __import__('lib.'+module,fromlist= ...

  6. 新特性GTID

    什么是GTID 每提交一个事务,当前的执行过程都会拿到一个唯一的标识符,此标识符不仅对其源mysql 实列是唯一的而在给定的复制环境中的所有mysql 实列也是唯一的,所哟的事务与其GTID 之间都是 ...

  7. WebApi 的三种寄宿方式 (一)

    最近逛博客园,看到了Owin,学习了一下,做个笔记,说不定将来哪天就用上了 关于 Owin 的介绍,百度解释的很清楚了: https://baike.baidu.com/item/owin/28607 ...

  8. Linux知识积累(8)卸载安装jdk

    java -version yum remove java yum groupremove java java -version tar -zxvf jdk-8u60-linux-x64.tar.gz ...

  9. spring-oauth-server实践:授权方式三:PASSWORD模式下 authorities:ROLE_{user.privillege}, ROLE_USER

    一.数据库配置 1.oauth_client_details 2.user_ 3.user_privillege 二.password模式 授权过程 1.授权者granter和请求参数 Resourc ...

  10. Oracle复合B*tree索引branch block内是否包含非先导列键值?

    好久不碰数据库底层细节的东西,前几天,一个小家伙跑来找我,非要说复合b*tree index branch block中只包含先导列键值信息,并不包含非先导列键值信息,而且还dump了branch b ...