- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Unity 应用程序块容器介绍
Microsoft 的 PP 团队在 12 日发布了 Unity 的社区预览版,大家可以在?Unity 的站点上查看它的最新信息。
从今天开始,我将和大家一起来学习这个控制反转(Inversion of Control, IoC) 和依赖注入(Dependency Injection, DI) 容器的使用。关于 IoC 和 DI,大家可以参考 Martin? Fowler 著的《IoC 容器和 Dependency Injection 模式》。
描述
Unity 应用程序块(Unity)是一个轻量级、可扩展的依赖注入容器,支持构造函数、属性和方法调用注入。它为开发人员提供了如下好处:
简化了对象的创建,尤其是分层的对象结构和依赖。
允许开发人员在运行时或者配置中指定依赖的需求抽象,以及简化了横切关注点的管理。
服务定位功能允许客户代码保存或者缓存容器。这在开发人员可以持久化容器到?ASP.NET?Session 或者 Application 中的 ASP.NET?Web 应用程序中特别有用。
常见场景
除了单独解决横切关注点如日志、认证、授权、缓存和异常处理的组件以外,现代业务系统通常由定制的业务对象和在应用程序中完成特殊的或者一般的任务的组件组成。成功构建这样的应用程序的关键是获得解耦的或者极度松耦合的设计。松耦合的应用程序更加灵活、更加易于维护。同时在开发期间进行测试,可以模拟对象的桩(轻量级模拟的实现),这增强了实质的依赖。例如,数据库连接、网络连接、ERP 连接和富用户接口组件。 依赖注入是一种用于构建松耦合应用程序的主要技术。它提供了处理对象间依赖的方法。例如,一个处理用户信息的对象可能依赖于访问数据存储、验证信息和检查 用户是否被授权执行更新的其他对象。依赖注入技术可以确保用户类正确的初始化及组装所有这些对象,特别是依赖是抽象的地方。
使用容器可以有很多好处,但它会改变应用程序的设计方式,尤其适合于基于组件的开发,朋友们可以有选择的使用它。
最基本的代码
下面的代码展示了 Unity 容器的最基本的使用方法。
IUnityContainer?myContainer?=?new?UnityContainer();myContainer.RegisterIMyObject,?MyRealObject();IMyObject?myRealObjectInstance?=?myContainer.GetIMyObject();
?
在上面的代码中,首先使用容器的 Register 方法注册了一个 IMyObject 接口到 MyRealObject 具体类的类型映射(注:映射还可以通过配置文件来进行指定),然后通过 Get 方法来获取 IMyObject 接口的默认映射所对应的具体对象实例。在这里,IMyObject 接口被做为映射的键,Get 方法通过它来查找注册的具体类的实例。
构造函数注入的代码示例
假如,我们有如下的类定义:
????public?class?MyObject?{????????public?MyObject(MyDependentClass?myInstance)?{????????????myInstance.UserName?=?myInstance.ToString();????????????Console.WriteLine(string.Format(My?name?is?{0}.,?myInstance.UserName));????????}????}
?
然后,利用容器,就可以这样来实例化 MyObject 类的对象:
????????????IUnityContainer?uContainer?=?new?UnityContainer();????????????MyObject?myInstance?=?uContainer.GetMyObject();
?
?Unity 容器会自动为 MyObject 对象创建 MyDependentClass 类的实例。
属性(设置器)注入的代码示例
例如,我们有如下的类定义:
????public?class?MyObject?{????????private?SomeOtherObject?_dependentObject;????????[Dependency]????????public?SomeOtherObject?DependentObject?{????????????get?{?return?_dependentObject;?}????????????set?{?_dependentObject?=?value;?}????????}????}
?
然后,使
您可能关注的文档
- CentOS系统下docker的安装配置及使用详解.docx
- C++ STL基本容器string,vector,list,deque,map.doc
- vector、list、deque的区别.doc
- java_Set,List,Map,Vector,ArrayList的区别.doc
- STL中vector、list,map函数.docx
- Java Collection List、Set、 Map、 HashMap、 Hashtable、 Vector.docx
- Docker 快速部署代码之道.docx
- IoC容器总结与简单模拟.docx
- bootstrap中经常遇到的问题.docx
- 16、高级swing组件.ppt
文档评论(0)