Spring.NET(一)——IoC管理对象
来源:互联网 发布:unity3d中文破解版 编辑:程序博客网 时间:2024/06/07 00:35
IoC(Inversion of Control)翻译为控制反转,在之前我们实例化一个对象是要依赖这个对象的类的,而IoC的作用是让对象依赖类变成利用IoC容器统一管理这些对象。从而是类和对象之间耦合度降低。
实例化一个对象,有三种方式:面向接口实例化,利用抽象工厂+反射,还有今天说的利用IoC。
先看下面的代码:一个接口,还有它的实现
namespace Demo{ public interface IUserInfo { void Show(); }namespace Demo{ public class UserInfo : IUserInfo { public void Show() { Console.WriteLine("hello"); } }}
namespace Demo{ class Program { private static void Main(string[] args) { IUserInfo userInfo=new UserInfo(); userInfo.Show(); } }}
2.利用抽象工厂+反射,可以不必知道具体的实现,利用工厂就可以创建出实例,这样接口和实例化对象就达到了松耦合。
namespace Demo{ /// <summary> /// 抽象工厂+反射 /// </summary> public static class DALFactory { public static IUserInfo GetusUserInfo() { string classFullName = "Demo.UserInfo"; var obj = Assembly.Load("Demo").CreateInstance(classFullName, true);</span> return obj as IUserInfo; } }}
//控制台代码namespace Demo{ class Program { private static void Main(string[] args) { IUserInfo userInfo = DALFactory.GetusUserInfo(); userInfo.Show(); } }}
先是写配置文件。
<?xml version="1.0" encoding="utf-8" ?><configuration> <configSections> <!--配置容器块--> <sectionGroup name="spring"> <section name="context" type="Spring.Context.Support.ContextHandler, Spring.Core"/> <section name="objects" type="Spring.Context.Support.DefaultSectionHandler, Spring.Core" /> </sectionGroup> </configSections> <!--容器配置--> <spring> <!--spring容器上下文,统一入口,创建的对象在config://spring/objects这个位置--> <context> <resource uri="config://spring/objects"/> </context> <!--容器中所有的对象--> <objects xmlns="http://www.springframework.net"> <object name="UserInfo" type="Demo.UserInfoEFDal, Demo"> </object> </objects> </spring></configuration>
控制台代码
namespace Demo{ class Program { static void Main(string[] args) { //创建spring.net统一入口 IApplicationContext ctx = ContextRegistry.GetContext(); //控制反转,实例创建由容器创建 IUserInfo dal = ctx.GetObject("UserInfo") as IUserInfo; dal.Show(); Console.ReadLine(); } }}
总结
从三种方式来对比了实例化一个对象的三种方式,第一种是利用面向接口编程的思想,让实现依赖接口,这样的耦合度还是很大。第二种方式利用抽象工厂加反射,这种方式可以完全不用考虑实现接口的类,直接利用工厂获取一个实例,这种方式达到了松耦合的效果;第三种方式应该也是利用了工厂模式的方式,而整个IoC更像一个封装好的工厂,只要我们写配置文件就可以实例对象,更加简单,也更灵活。
1 0
- Spring.NET(一)——IoC管理对象
- Spring-IoC对象管理
- 7.Spring管理对象:IoC
- Spring——IoC(一)原理
- 【Spring一】IOC控制对象
- 【初探Spring】——Spring IOC(一)
- 【深入Spring】——Tiny Spring IoC(一)Bean
- Spring IoC(一)
- Spring笔记(一):Ioc 之 Bean的管理
- 【Spring】——IOC配置对象实例
- spring源码分析(一)IOC管理Bean
- Spring基础(一)——AOP&IoC
- spring系列(一)——简介和IOC
- Spring源码阅读一——IOC
- 深入剖析Spring(一)——IoC的基本概念(从面向对象角度介绍)
- spring Ioc研究(一)
- Spring Ioc容器(一)
- Spring源码-IOC(一)
- 模拟ANGULAR 的一个cacheFactory方法
- Codeforces Problem-124A. The number of positions
- 起泡排序的进一步优化:快速排序
- JS-变量-1
- php标准库 SPL 迭代器之 ---------AppendIterator(遍历多个迭代器)
- Spring.NET(一)——IoC管理对象
- Mac OS原来自带了apache,基本用法总结
- 使用CocoaPods管理依赖库
- 格式化jsp/html文件
- 梯度下降(Gradient Descent),一句代码,一个式子
- 关于CPU Cache -- 程序员需要知道的那些事
- poj2229--Sumsets(动态规划)
- 黑马程序员——OC—面向对象的三大特性
- 再分享本工作流的书《流程的永恒之道》