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封装到一个单列类中
/// <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依赖注入的更多相关文章
- Unity 依赖注入之二
1. 构造子注入 1.1 构造子注入初级代码 container.RegisterType<IMyWork, MyWork>(new InjectionConstructor(new Bo ...
- Unity依赖注入使用详解
写在前面 构造器注入 Dependency属性注入 InjectionMethod方法注入 非泛型注入 标识键 ContainerControlledLifetimeManager单例 Unity注册 ...
- WPF PRISM开发入门二(Unity依赖注入容器使用)
这篇博客将通过一个控制台程序简单了解下PRISM下Unity依赖注入容器的使用.我已经创建了一个例子,通过一个控制台程序进行加减乘除运算,项目当中将输入输出等都用接口封装后,结构如下: 当前代码可以点 ...
- C# Unity依赖注入
简介: 控制反转:我们向IOC容器发出获取一个对象实例的一个请求,IOC容器便把这个对象实例“注入”到我们的手中,在这个过程中你不是一个控制者而是一个请求者,依赖于容器提供给你的资源,控制权落到了容器 ...
- Unity 依赖注入
关于Ioc的框架有很多,比如astle Windsor.Unity.Spring.NET.StructureMap,我们这边使用微软提供的Unity做示例,你可以使用Nuget添加Unity,也可以引 ...
- c# Unity依赖注入WebService
1.IOC与DI简介 IOC全称是Inversion Of Control(控制反转),不是一种技术,只是一种思想,一个重要的面相对象编程的法则,它能知道我们如何设计出松耦合,更优良的程序.传统应用程 ...
- 使用Microsoft.Practices.Unity 依赖注入
Unity是微软Patterns & Practices团队所开发的一个轻量级的,并且可扩展的依赖注入(Dependency Injection)容器,它支持常用的三种依赖注入方式:构造器注入 ...
- 使用Microsoft.Practices.Unity 依赖注入 转载https://www.cnblogs.com/slardar1978/p/4205394.html
Unity是微软Patterns & Practices团队所开发的一个轻量级的,并且可扩展的依赖注入(Dependency Injection)容器,它支持常用的三种依赖注入方式:构造器注入 ...
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(6)-Unity 依赖注入
系列目录 前言 为了符合后面更新后的重构系统,文章于2016-11-1日重写 本节重构一下代码,采用IOC控制反转,也就是依赖注入 您可以访问http://unity.codeplex.com/rel ...
- Unity 依赖注入知识点
三种依赖注入方法,构造器注入.属性注入.方法注入 可以配置Config文件,来实现不用修改代码.需要先将接口与实体关联,然后使用时会自动加载对应实体. namespace WeChatConsole ...
随机推荐
- Zabbix常用key和自定义key的讲解
zabbix中常用到的几个key: 1.监控端口的:net.tcp.port[,3306],可以在服务器端对被监控端测试. /usr/local/zabbix/bin/ -s192.168.8.120 ...
- linux --> ubuntu和mac通过samba共享
ubuntu和mac通过samba共享 如果想快速配置,直接跳到第五步. 一.安装smb 执行下列命令 sudo apt-get install samba sudo apt-get install ...
- 依赖layui form模块 复选框tree插件(拓展可根据属性单选还是多选,数据反选)
近些天接的项目用的是layui.以前没用过,踩了很多坑,坑就不多说了,直接说layui的tree.因为自带的tree不满足需求,所以在论坛.博客上找了很久终于找到了可以复选的的插件,原文地址:http ...
- Nginx阻止对不明确主机名的请求
在用户请求头中,有可能会有Host行不明确的情况,如果不想处理这类用户请求,那么可以定义一个默认的server来丢弃这类请求.例如 server{ listen default_server; ser ...
- drbd(二):配置和使用
本文目录:1.drbd配置文件2.创建metadata区并计算metadata区的大小3.启动drbd4.实现drbd主从同步5.数据同步和主从角色切换6.drbd脑裂后的解决办法7.drbd多卷组配 ...
- 【Alpha版本】冲刺阶段 - Day2 - 漂流
今日进展 袁逸灏:实现车辆的子弹发射(3.5h) 启动类,子弹类(修改类),游戏画面类(修改类) 刘伟康:继续借鉴其他 alpha 冲刺博客,初步了解墨刀.leangoo等工具(2h) 刘先润:解决了 ...
- Beta敏捷冲刺每日报告——Day1
1.情况简述 Beta阶段Scrum Meeting 敏捷开发起止时间 2017.11.2 00:00 -- 2017.11.3 00:00 讨论时间地点 2017.11.2 晚9:30,电话会议会议 ...
- 【评分】集美大学软件工程1413班工程项目管理个人作业2——APP案例分析
[评分]个人作业2--APP案例分析 作业要求 作业地址及完成情况 博文要求 通过分析你选中的产品,结合阅读<构建之法>,写一篇随笔,包含下述三个环节的所有要求. 第一部分 调研, 评测 ...
- Argparse简易教程
Argparse简易教程 原文:Argparse Tutorial 译者:likebeta 本教程是对于Python标准库中推荐使用的命令行解析模块argparse的简单介绍. PS:还有其他两个模块 ...
- iOS中滤镜种类及相关介绍