Unity V3 初步使用 —— 为我的.NET项目从简单三层架构转到IOC做准备
2017-08-29 14:18
507 查看
【前言】看过本博客的都知道(说得好像是热门博客似的,我真没法控制自己的臭美之情),本人喜欢在进入正题前总会喜欢搞点前奏,那么此文将不会再胡言乱语。马上开始。。。
【Unity简介】在.NET中是一种非常流行的IoC框架,最新版本为Unity v3。
【环境】VS2012、.NET Framework 4.5、Unity v3。
【安装Unity v3】在你的项目中(无则新建Demo),如下图所示,
一个接口三个类
包含Main方法的类Program
配置文件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/
<script type="text/javascript"><!-- google_ad_client = "ca-pub-1944176156128447"; /* cnblogs 首页横幅 */ google_ad_slot = "5419468456"; google_ad_width = 728; google_ad_height = 90; //--></script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
【Unity简介】在.NET中是一种非常流行的IoC框架,最新版本为Unity v3。
【环境】VS2012、.NET Framework 4.5、Unity v3。
【安装Unity v3】在你的项目中(无则新建Demo),如下图所示,
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/
<script type="text/javascript"><!-- google_ad_client = "ca-pub-1944176156128447"; /* cnblogs 首页横幅 */ google_ad_slot = "5419468456"; google_ad_width = 728; google_ad_height = 90; //--></script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
相关文章推荐
- Unity V3 初步使用 —— 为我的.NET项目从简单三层架构转到IOC做准备
- Unity V3 初步使用 —— 为我的.NET项目从简单三层架构转到IOC做准备
- .Net 三层架构开发初步
- .net中实现简单三层架构
- .NET 三层架构的简单规划
- 简单的三层asp.net webForm使用Ninject实现Ioc
- PetaPoco在.net项目中的简单使用 (存储过程篇)
- 使用objectdatasource结合数据绑定控件进行简单三层架构的开发
- 简单三层架构项目二
- 使用objectdatasource结合数据绑定控件进行简单三层架构的开发
- ADO.NET .net core2.0添加json文件并转化成类注入控制器使用 简单了解 iTextSharp实现HTML to PDF ASP.NET MVC 中 Autofac依赖注入DI 控制反转IOC 了解一下 C# AutoMapper 了解一下
- 【C#MVC】.NET中的IOC--Autofac简单使用
- Spring核心框架IOC---- Spring项目程序架构---- pring的三层架构模式
- 原:使用objectdatasource进行简单三层架构的开发 , 并实现Repeater现删改查
- IT咨询顾问:一次吐血的项目救火 java或判断优化小技巧 asp.net core Session的测试使用心得 【.NET架构】BIM软件架构02:Web管控平台后台架构 NetCore入门篇:(十一)NetCore项目读取配置文件appsettings.json 使用LINQ生成Where的SQL语句 js_jquery_创建cookie有效期问题_时区问题
- MVC项目实践,在三层架构下实现SportsStore-11,使用Knockout实现增删改查
- .NET领域最为流行的IOC框架之一Autofac WebAPI2使用Autofac实现IOC属性注入完美解决方案 AutoFac容器初步
- 简单的三层asp.net webForm使用Ninject实现Ioc
- 15开发前的准备:三层架构搭建及使用
- 使用objectdatasource结合数据绑定控件进行简单三层架构的开发