zoukankan      html  css  js  c++  java
  • Unity依赖注入

    一、简介

         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>();

  • 相关阅读:
    [Liferay6.2.2]AUI的小坑:input的type属性
    官方Tomcat 8.0.24 Web漏洞整改记录
    通过ajax访问Tomcat服务器web service接口时出现No 'Access-Control-Allow-Origin' header问题的解决办法
    前端开发之BOM和DOM
    前端开发之JavaScript
    前端开发之CSS
    前端开发之HTML
    python编程之进程
    python编程之操作系统基础
    python网络编程之socket
  • 原文地址:https://www.cnblogs.com/harveybarray/p/6890406.html
Copyright © 2011-2022 走看看