首页 > 代码库 > Unity依赖注入

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    {        private static readonly DIEntity instance;        private readonly 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>();        }    }

4、使用

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

Unity依赖注入