一 简单介绍

    
      IOC 控制转移,就是将创建放到容器里,从而达到接耦合的目的,DI是 在容器创建对象的时候,DI读取配置文件,然后给对象赋默认值,两者一般结合使用,实现注入。
     Spring.Net的功能:自动装配、属性和构造器参数依赖注入、依赖检查、生命周期接口等等,使用起来感觉更多的是配置,非常关键的就是App.Config配置文件
     技术使用的场景:在需要进行模块之间解耦操作的时候可以用到,一般的解耦操作用的都是面向接口编程,从而达到模块之间的解耦,解耦的意思就是:即使下一级模块修改后,依赖它的上一级模块也不需要改变,这就是解耦了。通常的做法,其中一种做法是,先抽象下一级模块的接口,在下一级模块和上一级模块之间创建一个工厂模块,上一级使用下一级抽象出的接口进行编程,实例使用工厂模块进行实例。工厂模块实例的方法有很多,简单的是直接实例,高级的是通过反射进行实例。具体可以在工厂模式中了解,之后也会针对几种设计模式写博文,紧急需要的可以给我留言,可以将我的个人总结发给你先。
     从上面的介绍,这个方法其实挺麻烦的,而使用spring.net则相对简单很多,简单配置就可以达到效果。
     本文只是入门,更深入的学习请通过API文档进行详细学习。
     关于Spring.Net的缺点也是不得不提到的,Spring.Net本质毕竟还是反射,性能方面会有些损失,不适合对性能要求高的大访问量的互联网项目,不过在企业级应用中,OA系统,HR系统,都是完全没有问题的,以及访问量中等的,起码几千人在线访问,也不是有很大问题,具体使用,需要斟酌。
 

二 创建对象,以及设置属性

     下载好Spring.Net,新建项目
     一般在目录下 \Spring.NET-2.0.0-M1\Spring.NET\bin\net\4.0\release,下面是一堆得dll,下面就可以可是新建项目测试了
     新建一个控制台
    主要使用 Common.Logging.dll 日志,Spring.Core.dll 核心库
     
创建好了项目,然后我们就要开始了
     先修改App.config
   
  <? xml version =" 1.0 " encoding =" utf-8 " ?>
< configuration>
< configSections>
< sectionGroup name = "spring " >
<!-- 这下面有context和object在下面都有对象的标签 -->
< section name = "context " type = "Spring.Context.Support.ContextHandler, Spring.Core " />
< section name = "objects " type = "Spring.Context.Support.DefaultSectionHandler, Spring.Core " />
</ sectionGroup >
</ configSections> < spring>
<!-- Spring.Net对象容器的配置 -->
< context >
<!-- 容器的所有的对象在哪里,这里用uri说明地址 -->
< resource uri = "config://spring/objects " />
<!-- 可以使用外部xml文件 --> </ context > <!-- objects:配置的容器里面的对象 -->
< objects xmlns = "http://www.springframework.net " >
< description >An example that demonstrates simple IoC features. </ description>
<!-- name最好用类名,type第一个是类的全称加上程序集,后面一个是项目名称 -->
< object name = "UserInfoDal " type = "SpringNetDemo.UserInfoDal, SpringNetDemo " >
<!-- 在这里是设置对象的属性,将Name的值设置成ctt -->
< property name = "Name " value = "ctt " />
</ object >
</ objects > </ spring> </ configuration>
 这里注意:配置放在<startup>标签后面会报错 “Spring.Context.Support.ContextRegistry”的类型初始值设定项引发异常,放在<startup>标签前面就可以了。
 
     public class UserInfoDal : IUserInfoDal
{
public string Name { get; set; } public void Show()
{
Console .WriteLine("zjh and "+Name );
}
}
Program里面
class Program
{
static void Main(string [] args)
{
//IApplicationContext是Spring里面的一个超类,主要操作类
IApplicationContext ctx = ContextRegistry .GetContext();
//GetObject从配置文件中读取信息后,反射产生相应的对象,用as强转成对象的接口
IUserInfoDal userInfoDal = ctx.GetObject("UserInfoDal" ) as IUserInfoDal;
//轻松加愉快,就这样出来了
userInfoDal.Show();
Console .ReadKey();
}
}
结果  zjh  and  ctt
 

三 创建复杂属性的设置

     创建一个服务测试类
public class UserInfoService
{
public IUserInfoDal UserInfoDal { get ; set; } public void Show()
{
UserInfoDal.Show();
Console .WriteLine("it is service" );
}
}
 
     配置文件配置
 
<? xml version =" 1.0 " encoding =" utf-8 " ?>
< configuration>
< configSections>
< sectionGroup name = "spring " >
<!-- 这下面有context和object在下面都有对象的标签 -->
< section name = "context " type = "Spring.Context.Support.ContextHandler, Spring.Core " />
< section name = "objects " type = "Spring.Context.Support.DefaultSectionHandler, Spring.Core " />
</ sectionGroup >
</ configSections> < spring>
<!-- Spring.Net对象容器的配置 -->
< context >
<!-- 容器的所有的对象在哪里,这里用uri说明 -->
< resource uri = "config://spring/objects " />
<!-- 可以使用外部xml文件 --> </ context > <!-- objects:配置的容器里面的对象 -->
< objects xmlns = "http://www.springframework.net " >
< description >An example that demonstrates simple IoC features. </ description>
<!-- name最好用类名,type第一个是类的全称加上程序集,后面一个是项目名称 -->
< object name = "UserInfoDal " type = "SprintNetDemo.UserInfoDal, SprintNetDemo " >
<!-- 在这里是设置对象的属性,将Name的值设置成ctt -->
< property name = "Name " value = "ctt " />
</ object >
<!-- 在这里配置UserInfoService对象 -->
< object name = "UserInfoService " type = "SprintNetDemo.UserInfoService, SprintNetDemo " >
<!-- 在这里配置UserInfoService对象的UserInfoDal属性,执行上面产生的对象 -->
< property name = "UserInfoDal " ref = "UserInfoDal " />
</ object >
</ objects > </ spring> </ configuration>
 
program代码
 
static void Main( string[] args)
{
//IApplicationContext是Spring里面的一个超类,主要操作类
IApplicationContext ctx = ContextRegistry .GetContext();
//创建出对象,主要在配置文件中对UserInfoService的UserInfoDal属性进行复制
UserInfoService userInfoService = ctx.GetObject( "UserInfoService" ) as UserInfoService;
userInfoService.Show();
Console.ReadKey();
}
 
结果
zjh  and  ctt
it is service
 

四 总结

 
     本文主要,简单地讲解了一些Spring.Net的例子,我这次也是项目中用到了,将自己的一些使用心得写出来,虽然例子比较简单,但是还是可以看出Spring.Net的强大之处,当然这里介绍的只是冰山一角。
     Spring.Net的中文文档,2007就没有再更新过了,如果大家想进一步学习,推荐阅读英文文档,当然英文不太好,阅读java的spring一样样的,嘿嘿,java有中文文档哟。
  如果有错误,欢迎指出来,谢谢。
 
 
 
 
 
 
 
 
 

Spring.Net 技术简介 IOC and DI的更多相关文章

  1. Spring入门一:IOC、DI、AOP基本思想

    Spring框架是一个集众多涉及模式于一身的开源的.轻量级的项目管理框架,致力于javaee轻量级解决方案.相对于原来学过的框架而言,spring框架和之前学习的struts2.mybatis框架有了 ...

  2. Spring MVC -- Spring框架入门(IoC和DI)

    Spring MVC是Spring框架中用于Web应用开发的一个模块.Spring MVC的MVC是Model-View-Controller的缩写.它是一个广泛应用于图像化用户交互开发中的设计模式, ...

  3. Spring框架中的IOC和DI的区别

    上次面试被问到IOC和DI的区别时,没怎么在意,昨天又被问到,感觉有点可惜.今晚总算抽点时间,查看了spring官方文档.发现,IoC更像是一种思想,DI是一种行为.为了降低程序的耦合度,利用spri ...

  4. Spring系列三:IoC 与 DI

    水晶帘动微风起,满架蔷薇一院香. 概述 在软件工程中,控制反转(IoC)是一种设计思想,对象之间耦合在一起,在运行时自动绑定,并且它们编译时对所需要引用的对象是不确定的.在这个spring教程中,通过 ...

  5. spring学习笔记之---IOC和DI

    IOC和DI (一)IOC (1) 概念 IOC (Inverse of Control) 反转控制,就是将原本在程序中手动创建对象的控制权,交给spring框架管理.简单的说,就是创建对象控制权被反 ...

  6. Spring总结四:IOC和DI 注解方式

    首先我们要了解注解和xml配置的区别: 作用一样,但是注解写在Bean的上方来代替我们之前在xml文件中所做的bean配置,也就是说我们使用了注解的方式,就不用再xml里面进行配置了,相对来说注解方式 ...

  7. Spring 注解方式 实现 IOC 和 DI

    注:以下所有测试案例(最后一个除外)的测试代码都是同一个: package cn.tedu.test; import org.junit.Test; import org.springframewor ...

  8. 第四课:通过配置文件获取对象(Spring框架中的IOC和DI的底层就是基于这样的机制)

    首先在D盘创建一个文件hero.txt,内容为:com.hero.Hero(此处必须是Hero的完整路径) 接下来是Hero类 package com.hero; public class Hero ...

  9. IOC and DI

    Spring.Net 技术简介 IOC and DI   一 简单介绍            IOC 控制转移,就是将创建放到容器里,从而达到接耦合的目的,DI是 在容器创建对象的时候,DI读取配置文 ...

随机推荐

  1. paper 64:尺度空间(Scale space)理论

    尺度空间方法的基本思想是:在视觉信息处理模型中引入一个被视为尺度的参数,通过连续变化尺度参数获得不同尺度下的视觉处理信息,然后综合这些信息以深入地挖掘图像的本质特征.尺度空间方法将传统的单尺度视觉信息 ...

  2. sql 把一列的数据按逗号分隔转换成多行

    ALTER proc [dbo].[ModifyWkCashAccountNo]asbeginset xact_abort onbegin transactiondeclare @errors int ...

  3. 夺命雷公狗---微信开发59----在线点播电影网1之ckplayer播放器

    我们节课程就要开始写一个小项目了,这项目主要是写一个在线点播电影影网的,我们用到的播放器是ckplayer ckplayer基本介绍: ckplayer的全称是:超酷flv播放器,他是一款用于网页上播 ...

  4. pic计数

    #include <pic.h> //用的是PICC编译器 __CONFIG (HS & PROTECT & PWRTEN & BOREN & WDTDIS ...

  5. Mysql数据库读写分离配置

    环境模拟 实现读写分离 减轻数据库的负荷 主服务器  master   10.0.0.12 从服务器 slave    10.0.0.66 配置主服务器: 在10.0.0.12服务器操作   创建数据 ...

  6. FastJson之有道翻译

    在AndroidMainifast.xml中加入相应的访问权限 <uses-permission android:name="android.permission.INTERNET&q ...

  7. YUI3 CSS

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/stri ...

  8. Delphi XE的firemonkey获取当前文件所在路径的方法

    Delphi XE的firemonkey获取当前文件所在路径的方法 在之前,我们知道有三种方法: ExtractFilePath(ParamStr(0)) ExtractFilePath(Applic ...

  9. linux设备驱动归纳总结(八):1.总线、设备和驱动【转】

    本文转载自:http://blog.chinaunix.net/uid-25014876-id-109733.html linux设备驱动归纳总结(八):1.总线.设备和驱动 xxxxxxxxxxxx ...

  10. Backup: Numbers in Perl6

    Perl6 is a new language, not a improved version of Perl5. Perl6 inherits many good features from man ...