Unity V3 初步使用 —— 为我的.NET项目从简单三层架构转到IOC做准备
【声明】由于本人表达能力有限,为避免不必要的误人子弟,本文将不会涉及IOC与DI,仅仅描述新版本Unity 3的使用(非Unity 3D,如果您想看的是Unity 3D请立即离开,否则莫怪此处“谋财害命”)
【前言】看过本博客的都知道(说得好像是热门博客似的,我真没法控制自己的臭美之情),本人喜欢在进入正题前总会喜欢搞点前奏,那么此文将不会再胡言乱语。马上开始。。。
【Unity简介】在.NET中是一种非常流行的IoC框架,最新版本为Unity v3。
【环境】VS2012、.NET Framework 4.5、Unity v3。
【安装Unity v3】在你的项目中(无则新建Demo),如下图所示,
在弹出的窗口搜索“Unity”,
安装完之后可以管理解决方案中的项目是否使用Unity,如下图勾选或取消勾选即可。
当然也可以直接在官网下载然后引用,这也是之前常用的方式。
【Coding】我的代码包含一个接口(IRegionFormat)三个类(DefaultRegionFormat、
DayMonthYearRegionFormat、MonthDayYearRegionFormat),还有一个包含Main方法的类Program。
public interface IRegionFormat{string FormatName { get; }string GetShortTimeString(DateTime time);}public class DefaultRegionFormat : IRegionFormat{public string FormatName{get { return "默认时间格式"; }}public string GetShortTimeString(DateTime time){return time.ToString("yyyy-MM-dd");}}public class DayMonthYearRegionFormat : IRegionFormat{public string FormatName{get { return "日月年格式"; }}public string GetShortTimeString(DateTime time){return time.ToString("dd/MM/yyyy");}}public class MonthDayYearRegionFormat : IRegionFormat{public MonthDayYearRegionFormat(string s){Console.WriteLine("构造函数的参数:{0}", s);}public string FormatName{get { return "月日年格式"; }}public string GetShortTimeString(DateTime time){return time.ToString("MM/dd/yyyy");}}
一个接口三个类
static void Main(string[] args){//NoConfigUnity();//ConfigUnity(); ParameterUnity();Console.Read();}/// <summary>/// 全编码方式注入/// </summary>static void NoConfigUnity(){IUnityContainer container = GetRegisterContainer();IRegionFormat format1 = container.Resolve<IRegionFormat>();WriteFormat(format1);}/// <summary>/// 编码方式进行注入,此种方式无需在配置文件进行配置/// </summary>static IUnityContainer GetRegisterContainer(){IUnityContainer container = new UnityContainer();container.RegisterType<IRegionFormat, DefaultRegionFormat>();//container.RegisterType<IRegionFormat, DayMonthYearRegionFormat>(); //同一个接口注册两次,将以最后一次注册为准return container;}/// <summary>/// 通过配置文件进行注入/// </summary>static void ConfigUnity(){IUnityContainer container = new UnityContainer();UnityConfigurationSection section = ConfigurationManager.GetSection(UnityConfigurationSection.SectionName) as UnityConfigurationSection;//section.Configure(container, "defaultContainer");section.Configure(container, "DayMonthYearContainer");WriteFormat(container.Resolve<IRegionFormat>());}/// <summary>/// 构造方法含参数的注入/// </summary>static void ParameterUnity(){IUnityContainer container = new UnityContainer();UnityConfigurationSection section = ConfigurationManager.GetSection(UnityConfigurationSection.SectionName)as UnityConfigurationSection; section.Configure(container, "MonthDayYearContainer"); //构造函数包含非注入类型参数container.RegisterInstance(typeof(string), "string类型注入"); //注册对象,以便于对构造函数调用的参数初始化指定值WriteFormat(container.Resolve<IRegionFormat>());}static void WriteFormat(IRegionFormat format){if (format != null){Console.WriteLine("格式名称:{0};当前时间:{1}", format.FormatName, format.GetShortTimeString(DateTime.Now));}}
包含Main方法的类Program
<?xml version="1.0" encoding="utf-8" ?> <configuration><configSections><section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection,Microsoft.Practices.Unity.Configuration" /></configSections><startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /></startup><unity><containers><container name="defaultContainer"><register type="UnityDemo.IRegionFormat,UnityDemo" mapTo="UnityDemo.DefaultRegionFormat,UnityDemo"></register></container><container name="DayMonthYearContainer"><register type="UnityDemo.IRegionFormat,UnityDemo" mapTo="UnityDemo.DayMonthYearRegionFormat,UnityDemo"></register></container><container name="MonthDayYearContainer"><register type="UnityDemo.IRegionFormat,UnityDemo" mapTo="UnityDemo.MonthDayYearRegionFormat,UnityDemo"></register></container></containers></unity> </configuration>
配置文件app.config
代码有注释,就不罗嗦拉。
【值得注意的是】 1. 注入的接口对象所属的类中包含构造函数,且构造函数包含未进行注入的参数类型(如string,如果非要问还有哪些属于,我的回答是我也不知道,但是只有object类型作为构造函数参数运行时是不报错的),则要进行“RegisterInstance”,如Program类中的ParameterUnity方法所示。
2. 配置文件是XML格式,切记区分大小写。
3.Unity 3 帮助文档:http://msdn.microsoft.com/en-us/library/dn170416.aspx
complex 地址: http://unity.codeplex.com/
转载于:https://www.cnblogs.com/FreeDong/p/3179443.html
Unity V3 初步使用 —— 为我的.NET项目从简单三层架构转到IOC做准备相关推荐
- CS通用项目系统搭建——三层架构第一天
CS通用项目:使用三层架构进行搭建 三层架构: 表现层(UI(User Interface)):展示给用户的层面,包含窗体控件数据等信息. 业务逻辑层(BLL(Business Logic Layer ...
- MVC项目实践,在三层架构下实现SportsStore-03,Ninject控制器工厂等
SportsStore是<精通ASP.NET MVC3框架(第三版)>中演示的MVC项目,在该项目中涵盖了MVC的众多方面,包括:使用DI容器.URL优化.导航.分页.购物车.订单.产品管 ...
- MVC项目实践,在三层架构下实现SportsStore-06,实现购物车
SportsStore是<精通ASP.NET MVC3框架(第三版)>中演示的MVC项目,在该项目中涵盖了MVC的众多方面,包括:使用DI容器.URL优化.导航.分页.购物车.订单.产品管 ...
- MVC项目实践,在三层架构下实现SportsStore-01,EF Code First建模、DAL层等
SportsStore是<精通ASP.NET MVC3框架(第三版)>中演示的MVC项目,在该项目中涵盖了MVC的众多方面,包括:使用DI容器.URL优化.导航.分页.购物车.订单.产品管 ...
- Javaweb MVC设计模式、Modle发展史、项目分层和三层架构
文章目录 MVC设计模式 MVC的目的 MVC举例 jsp+servlet+javabean模式 MVC的优点 MVC的缺点 Modle 发展史 项目分层 三层架构 MVC设计模式 MVC模式(Mod ...
- SSM框架实战详细教程(十四)贯穿项目实战之三层架构
之前我们的项目足够简单,所以使用的是两层架构,现在为了学习Spring,需要使用行业中常见的三层架构,关于分层开发的原则请看下图: 本次对项目的调整,主要是由之前的controller ...
- java三层架构项目事例_三层架构实例
一.概要 在我的上一篇博客中,我们谈了谈分层,到底为什么分层(http://blog.csdn.net/shan9liang/article/details/6836300) 这篇博客,准备用一个小D ...
- 对asn.net三层架构的初步认识
从接触三层架构到现在有两三个月的时间了,从听说时候的一头雾水到中期对各个层的迷迷糊糊(现在还有点迷惑不过好多了),还有就是今天的不完全了解,虽然进展的很慢,但是总算是有了一点点的眉目,废话少说来看下具 ...
- Maven项目+MVC三层架构+Mysql+Tomcat+私教预约系统前后端(私教、用户、管理员)+可以用于学习SSM框架、javaweb、maven项目入门
Maven项目+MVC三层架构+Mysql+Tomcat+私教预约系统前后端(私教.用户.管理员)+可以用于学习SSM框架.javaweb.maven项目入门 可以用于课程设计.毕业设计的知识点入门学 ...
- 《项目经验》--简单三层使用DataTable向数据库表批量导入数据---向SqlServer多张张表中导入数据
前面已经介绍过如何向数据库的一张表中批量导入数据,详情见博客<项目经验---简单三层使用DataTable向数据库表批量导入数据---向SqlServer一张表中导入数据>:本文主要介绍如 ...
最新文章
- 【Qt】Qt再学习(三):Chart Themes Example(常用图表)
- discovery_01
- yenv - 一个使用 JAML 文件管理环境的 Node.js 工具
- python-操作数据库的练习
- mybais逆向工程快速生成实体和基本xml
- Python函数默认值参数的2个坑
- uniapp编译成小程序代码过大的处理方法
- caffe 安装方法(python)
- python的并行计算框架
- STM32MP1如何让洗衣机操作界面更炫酷?
- cocos2dx-9.键盘事件-实现精灵的连续移动
- Harmonious Graph
- 学生机房随堂测试软件,全智能考试系统——随堂评测考试系统
- HC-SR04超声波测距块讲解(附32单片机源码)
- 小括号教学设计导入_《认识小括号》教学设计.doc
- python中的mat的操作
- 驾校微机室计算机操作流程,学车
- ubuntu18.04安装XMind8
- 20170206(计算机网络名词解析)
- Windows下安装Apollo配置中心