IOC : Unity 配置和使用
原文出自:IOC : Unity 配置和使用
之前Terry Lee 已经介绍过Unity的简单使用了,不过那篇文章是针对旧版本的,现在的版本1.2版略有不同。
我下载了Unity并做了一个简单的测试,项目的分布是这个样子:
![]()
LoggerTest.Interface.ILogger 主要是接口, 一个简单的不能再简单的方法结构:
public interface ILogger
{
void Write(string message);
}
LoggerTest 是实现这个接口的project, 恩,跟Terry Lee 的例子一样,实现两个就OK了,分别是FlatFileLogger和DatabaseLogger。
namespace LoggerTest
{
public class FlatFileLogger : ILogger
{
public void Write(string message)
{
Console.WriteLine(String.Format("Message:{0}", message));
Console.WriteLine("Target:FlatFile");
}
} public class DatabaseLogger : ILogger
{
public void Write(string message)
{
Console.WriteLine(String.Format("Message:{0}", message));
Console.WriteLine("Target:Database");
}
}
}
下面是Unity出场的时候了,可能初学者不知道要引用哪些组件(像我就是),这里截个图告诉大家:
![]()
如果是显示注入,调用Microsoft.Practices.Unity 和Microsoft.Practices.ObjectBuilder2 就可以了;如果是通过配置文件注入,那么就要另外引用Microsoft.Practices.Unity.Configuration
好了,那么基本上就大功告成,代码里已经注释的很清楚了
//显式获取UnityContainer
private IUnityContainer GetContainer_Directly()
{
IUnityContainer container = new UnityContainer();
//如果注册多个类型需要指定名字(名字是任意的)
//否则当调用ResolveAll<>()时,那些没有指定名字的将会获取不到
//但是,Resolve<>() 会默认取那些空名字的注入对象。
container.RegisterType<ILogger, DatabaseLogger>("databaseLogger");
container.RegisterType<ILogger, FlatFileLogger>("flatfileLogger");
return container;
} //从配置文件获取UnityContainer
private IUnityContainer GetContainer_Config()
{
IUnityContainer container = new UnityContainer();
UnityConfigurationSection section = (UnityConfigurationSection)System.Configuration.ConfigurationManager.GetSection("unity");
section.Containers[0].Configure(container);
return container;
} public void Test()
{
IUnityContainer container = GetContainer_Config();
foreach (ILogger logger in container.ResolveAll<ILogger>())
logger.Write("Bruce Lee");
}
配置文件:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Microsoft.Practices.Unity.Configuration" />
</configSections>
<unity>
<containers>
<container name="One">
<types>
<type type="LoggerTest.Interface.ILogger, LoggerTest.Interface" name="FlatFileLogger"
mapTo="LoggerTest.FlatFileLogger, LoggerTest"/>
<type type="LoggerTest.Interface.ILogger, LoggerTest.Interface" name="DatabaseLogger"
mapTo="LoggerTest.DatabaseLogger, LoggerTest"/>
</types>
</container>
</containers>
</unity>
</configuration>
运行效果:
![]()
后记:Unity的简单介绍
以下摘自贪睡虫: http://www.cnblogs.com/liujian969/archive/2009/01/17/1377446.html
描述
Unity 应用程序块(Unity)是一个轻量级、可扩展的依赖注入容器,支持构造函数、属性和方法调用注入。它为开发人员提供了如下好处:
- 简化了对象的创建,尤其是分层的对象结构和依赖。
- 允许开发人员在运行时或者配置中指定依赖的需求抽象,以及简化了横切关注点的管理。
- 服务定位功能允许客户代码保存或者缓存容器。这在开发人员可以持久化容器到 ASP.NET Session 或者 Application 中的 ASP.NET Web 应用程序中特别有用。
常见场景
除了单独解决横切关注点如日志、认证、授权、缓存和异常处理的组件以外,现代业务系统通常由定制的业务对象和在应用程序中完成特殊的或者一般的任务的组件组成。
成功构建这样的应用程序的关键是获得解耦的或者极度松耦合的设计。松耦合的应用程序更加灵活、更加易于维护。同时在开发期间进行测试,可以模拟对象的桩(轻量级模拟的实现),这增强了实质的依赖。例如,数据库连接、网络连接、ERP 连接和富用户接口组件。
依赖注入是一种用于构建松耦合应用程序的主要技术。它提供了处理对象间依赖的方法。例如,一个处理用户信息的对象可能依赖于访问数据存储、验证信息和检查用户是否被授权执行更新的其他对象。依赖注入技术可以确保用户类正确的初始化及组装所有这些对象,特别是依赖是抽象的地方。
使用容器可以有很多好处,但它会改变应用程序的设计方式,尤其适合于基于组件的开发,朋友们可以有选择的使用它。
IOC : Unity 配置和使用的更多相关文章
- Spring IOC的配置使用(转)
转:http://www.cnblogs.com/linjiqin/p/3408306.html Spring IOC的配置使用 1.1.1 XML配置的结构一般配置文件结构如下: <beans ...
- Spring学习(4)IOC容器配置bean:定义与实例化
一. IOC容器配置 1. 一些概念 (1)IOC容器: 定义:具有管理对象和管理对象之间的依赖关系的容器. 作用:应用程序无需自己创建对象,对象由IOC容器创建并组装.BeanFactory是IO ...
- [IOC]Unity使用
Unity是什么? unity是patterns&practices团队开发的一个轻量级.可扩展的依赖注入容器. Unity特性 1.它提供了创建(或者装配)对象实例的机制,而这些对象实例可能 ...
- CQRS学习——IOC,配置,仓储隔离以及QueryEntry[其三]
从IoC开始说起 博主最早开始用的IoC容器叫AutoFac,那时候用它主要是为了生命周期管理——将EF上下文的生命周期限定为每请求.当然也总是每每听到IoC的好处,但是仍然不能理解其优势.最近在学习 ...
- IOC Unity
1. 依赖倒置原则和IOC2. IOC(Inversion of Control)的好处3. 介绍和使用Unity依赖倒置原则(DIP):上层和下层之间,依赖抽象,而不依赖细节IOC 控制反转,把上端 ...
- IoC 之 2.3 IoC的配置使用(叁)
2.3.1 XML配置的结构 一般配置文件结构如下: <beans> <import resource="resource1.xml"/> <bea ...
- 使用微软企业库5.0提供的unity配置解藕系统demo(源码)
最近公司集50多号开发人员的人力围绕一个系统做开发,框架是免不了要统一的,公司提供的架构,利于分工合作,便于维护,扩展,升级,其中使用了到微软的企业库来解藕系统,只是因为框架封装,于是在网上学习了一个 ...
- 开涛spring3(2.3) - IoC的配置使用
2.3.1 XML配置的结构 一般配置文件结构如下: <beans> <import resource=”resource1.xml”/> <bean id=”bean ...
- Unity配置安卓开发环境
1. 首先要安装JDK,从网上下载即可,我用的版本如下图 注意:此时要保存JDK的路径信息,后面需要使用2. 配置环境变量,计算机右键点属性->高级->环境变量3. 在系统中新建环境变量 ...
随机推荐
- 开关VoLTE流程分析(一)
开关按钮位置: 设置--> 更多--> 移动网络--> 增强型4G LTE模式 控件初始化addEnhanced4GLteSwitchPreference,该设置开关使用了Switc ...
- bayaim_杀神_全民飞机大战
bayaim_杀神_全民飞机大战 ------------------------ 系统:IOS QQ:7742469490 王者:30 游戏名:神 级别:98 装备:满鸡 + 新战魂+ 歼31 + ...
- Python—文件读写操作
初识文件操作 使用open()函数打开一个文件,获取到文件句柄,然后通过文件句柄就可以进行各种各样的操作了,根据打开文件的方式不同能够执行的操作也会有相应的差异. 打开文件的方式: r, w, a, ...
- 记录一下自己在MVC项目中如何防CSRF攻击,直接上代码
1.前端的处理: 2.后台 1.)添加过滤器,哪里用放哪里 2.)需要验证的方法上直接添加过滤器即可 大功告成 以下为过滤器代码块 /// <summary>/// ajax中加上Anti ...
- Centos7 环境安装初始化
安装系统 默认分区 磁盘分配(以20G为例): Boot分区:引导分区系统启动的必要核心文件,建议1G Var分区:存放log文件,不分则在/下,建议1G Home分区:存放用户数据,一般都比较大,建 ...
- postman---postman参数化
我们在做接口测试的过程中,都会遇到同一个接口不同的数据,每次去一个个填写数据就太麻烦了,今天我们一起学习下如何通过postman进行参数化 参数化 参数化就是1个接口请求不同的数据,我们可以通过把请求 ...
- Vue项目开发前的准备工作,node的安装,vue-cli的安装
一.安装node 1- 点击这里进入node官网下载 2- 3- 下载完成是这样的 4- 双击打开进行安装,一路next,安装完成是这样 5- 打开cmd进入安装node的文件夹,输入node ...
- SpringCloud学习笔记(九、SpringCloud Stream)
目录: 什么是SpringCloud Stream 如何使用SpringCloud Stream 消息分流 什么是SpringCloud Stream: SpringCloud Stream是一个用于 ...
- NOIP 2011 铺地毯
洛谷 P1003 铺地毯 洛谷传送门 JDOJ 1744: [NOIP2011]铺地毯 D1 T1 JDOJ传送门 Description 为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看 ...
- SqlServer断开所有连接
有时候我们在使用SqlServer管理工具操作数据库的时候,需要对数据库进行改名,但是如果当前数据库还有连接未释放的话,是不能改名的. 有很多方式可以断开所有连接,这里介绍一种个人觉得比较简单的方式. ...