【声明】由于本人表达能力有限,为避免不必要的误人子弟,本文将不会涉及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做准备相关推荐

  1. CS通用项目系统搭建——三层架构第一天

    CS通用项目:使用三层架构进行搭建 三层架构: 表现层(UI(User Interface)):展示给用户的层面,包含窗体控件数据等信息. 业务逻辑层(BLL(Business Logic Layer ...

  2. MVC项目实践,在三层架构下实现SportsStore-03,Ninject控制器工厂等

    SportsStore是<精通ASP.NET MVC3框架(第三版)>中演示的MVC项目,在该项目中涵盖了MVC的众多方面,包括:使用DI容器.URL优化.导航.分页.购物车.订单.产品管 ...

  3. MVC项目实践,在三层架构下实现SportsStore-06,实现购物车

    SportsStore是<精通ASP.NET MVC3框架(第三版)>中演示的MVC项目,在该项目中涵盖了MVC的众多方面,包括:使用DI容器.URL优化.导航.分页.购物车.订单.产品管 ...

  4. MVC项目实践,在三层架构下实现SportsStore-01,EF Code First建模、DAL层等

    SportsStore是<精通ASP.NET MVC3框架(第三版)>中演示的MVC项目,在该项目中涵盖了MVC的众多方面,包括:使用DI容器.URL优化.导航.分页.购物车.订单.产品管 ...

  5. Javaweb MVC设计模式、Modle发展史、项目分层和三层架构

    文章目录 MVC设计模式 MVC的目的 MVC举例 jsp+servlet+javabean模式 MVC的优点 MVC的缺点 Modle 发展史 项目分层 三层架构 MVC设计模式 MVC模式(Mod ...

  6. SSM框架实战详细教程(十四)贯穿项目实战之三层架构

    之前我们的项目足够简单,所以使用的是两层架构,现在为了学习Spring,需要使用行业中常见的三层架构,关于分层开发的原则请看下图:         本次对项目的调整,主要是由之前的controller ...

  7. java三层架构项目事例_三层架构实例

    一.概要 在我的上一篇博客中,我们谈了谈分层,到底为什么分层(http://blog.csdn.net/shan9liang/article/details/6836300) 这篇博客,准备用一个小D ...

  8. 对asn.net三层架构的初步认识

    从接触三层架构到现在有两三个月的时间了,从听说时候的一头雾水到中期对各个层的迷迷糊糊(现在还有点迷惑不过好多了),还有就是今天的不完全了解,虽然进展的很慢,但是总算是有了一点点的眉目,废话少说来看下具 ...

  9. Maven项目+MVC三层架构+Mysql+Tomcat+私教预约系统前后端(私教、用户、管理员)+可以用于学习SSM框架、javaweb、maven项目入门

    Maven项目+MVC三层架构+Mysql+Tomcat+私教预约系统前后端(私教.用户.管理员)+可以用于学习SSM框架.javaweb.maven项目入门 可以用于课程设计.毕业设计的知识点入门学 ...

  10. 《项目经验》--简单三层使用DataTable向数据库表批量导入数据---向SqlServer多张张表中导入数据

    前面已经介绍过如何向数据库的一张表中批量导入数据,详情见博客<项目经验---简单三层使用DataTable向数据库表批量导入数据---向SqlServer一张表中导入数据>:本文主要介绍如 ...

最新文章

  1. 【Qt】Qt再学习(三):Chart Themes Example(常用图表)
  2. discovery_01
  3. yenv - 一个使用 JAML 文件管理环境的 Node.js 工具
  4. python-操作数据库的练习
  5. mybais逆向工程快速生成实体和基本xml
  6. Python函数默认值参数的2个坑
  7. uniapp编译成小程序代码过大的处理方法
  8. caffe 安装方法(python)
  9. python的并行计算框架
  10. STM32MP1如何让洗衣机操作界面更炫酷?
  11. cocos2dx-9.键盘事件-实现精灵的连续移动
  12. Harmonious Graph
  13. 学生机房随堂测试软件,全智能考试系统——随堂评测考试系统
  14. HC-SR04超声波测距块讲解(附32单片机源码)
  15. 小括号教学设计导入_《认识小括号》教学设计.doc
  16. python中的mat的操作
  17. 驾校微机室计算机操作流程,学车
  18. ubuntu18.04安装XMind8
  19. 20170206(计算机网络名词解析)
  20. Windows下安装Apollo配置中心

热门文章

  1. Texpad for Mac编辑器使用说明
  2. Mac电脑卡在启动模式了怎么办?
  3. TaskPaper教程——如何安装运行脚本?
  4. 关闭所有的screen
  5. 有赞招聘小程序,有你就很赞
  6. 35.5. array route
  7. 2016年 企业IT管理员需要做好这些准备
  8. Hybrid App是如何实现网页语言与程序语言的混合?谁占主体?
  9. 触发器和存储过程的使用
  10. leetcode 【 Sort Colors 】python 实现