Spring.NET IoC容器的用法。

通过简单的例子学习Spring.Net

1、先创建一个控制台程序项目。

2、添加IUserInfoDal 接口。

namespace Spring.Net
{
public interface IUserInfoDal
{
void Show();
}
}

 

3、添加AdoNetUserInfoDal类和EFUserInfoDal类,继承IUserInfoDal接口。

AdoNetUserInfoDal.cs

public class AdoNetUserInfoDal:IUserInfoDal{public void Show(){Console.WriteLine("我是 AdoNet Dal );
        }}

EFUserInfoDal.cs

public class EFUserInfoDal: IUserInfoDal{public void Show(){Console.WriteLine("我是EF Dal);
        }     }

4、引用Spring.Net程序集 Spring.Core.dll 和 Common.Logging.dll

5、添加Spring.Net配置节点,配置object节点

<?xml version="1.0" encoding="utf-8" ?>
<configuration><!--一定要在紧跟着configuration下面添加--><configSections><!--跟下面Spring.Net节点配置是一一对应关系--><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><startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /></startup><!--Spring.Net节点配置--><spring><context><!--容器配置--><resource uri="config://spring/objects"/></context><objects xmlns="http://www.springframework.net"><!--这里放容器里面的所有节点--><description>An  example that demonstrates simple IoC features.</description><!--name 必须要唯一的,type=类的全名称,所在的程序集--><object name="UserInfoDal" type="Spring.Net.EFUserInfoDal, Spring.Net"></object>      </spring>
</configuration>

6、开始写主函数,创建spring容器上下文

namespace Spring.Net
{class Program{static void Main(string[] args){//控制权没有反转//IUserInfoDal infoDal = new EFUserInfoDal();//Spring.Net 创建实例的方式转为容器帮我们创建//创建spring容器上下文IApplicationContext ctx = ContextRegistry.GetContext();//通过容器创建对象IUserInfoDal efDal = ctx.GetObject("UserInfoDal") as IUserInfoDal;efDal.Show();Console.ReadKey();}}
}

7、属性注入

<!--Spring.Net节点配置--><spring><context><!--容器配置--><resource uri="config://spring/objects"/></context><objects xmlns="http://www.springframework.net"><!--这里放容器里面的所有节点--><description>An  example that demonstrates simple IoC features.</description><!--name 必须要唯一的,type=类的全名称,所在的程序集--><object name="UserInfoDal" type="Spring.Net.EFUserInfoDal, Spring.Net"><property name="Name" value="张三"/><!--ref指向下面的属性注入--><property name="UserInfo" ref="UserInfo"/></object>      <!--属性注入--><object name="UserInfo" type="Spring.Net.UserInfo, Spring.Net"><property name="Name" value="李四"/><property name="Age" value="15"/></object></objects></spring>

8、构造函数注入

<!--构造函数注入-->
<object name="UserInfoDal2" type="Spring.Net.AdoNetUserInfoDal, Spring.Net"><constructor-arg index="0" value="张三"/><constructor-arg index="1" ref="UserInfo"/>
</object>

9、容器配置

<context><!--容器配置--><resource uri="config://spring/objects"/><!--xml文件方式,更改属性,复制到输出目录:始终复制--><!--<resource uri="file://objects.xml"/>--><!--嵌入程序集方式,assembly://程序集名/项目名/objects.xml,更改属性,始终复制,生成操作,嵌入的资源--><!--<resource uri="assembly://Spring.Net/Spring.Net/objects.xml"/>-->
</context>

10、完整例子

IUserInfoDal.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace Spring.Net
{public interface IUserInfoDal{UserInfo UserInfo { get; set; }string Name { get; set; }void Show();}
}

AdoNetUserInfoDal.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace Spring.Net
{public class AdoNetUserInfoDal:IUserInfoDal{public AdoNetUserInfoDal(string name, UserInfo userInfo){Name = name;UserInfo = userInfo;}public UserInfo UserInfo { get; set; }public string Name { get; set; }public void Show(){Console.WriteLine("我是 AdoNet Dal ,属性注入:Name=" + Name);Console.WriteLine("UserInfo ,Name=" + UserInfo.Name + " Age=" + UserInfo.Age);}}
}

EFUserInfoDal.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace Spring.Net
{public class EFUserInfoDal: IUserInfoDal{public EFUserInfoDal(){}public UserInfo UserInfo { get; set; }public string Name { get; set; }public void Show(){Console.WriteLine("我是EF Dal,属性注入:Name=" + Name);Console.WriteLine("UserInfo ,Name=" + UserInfo.Name + " Age=" + UserInfo.Age);}     }
}

App.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration><!--一定要在紧跟着configuration下面添加--><configSections><!--跟下面Spring.Net节点配置是一一对应关系--><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><startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /></startup><!--Spring.Net节点配置--><spring><context><!--容器配置--><resource uri="config://spring/objects"/><!--xml文件方式,更改属性,复制到输出目录:始终复制--><!--<resource uri="file://objects.xml"/>--><!--嵌入程序集方式,assembly://程序集名/项目名/objects.xml,更改属性,始终复制,生成操作,嵌入的资源--><!--<resource uri="assembly://Spring.Net/Spring.Net/objects.xml"/>--></context><objects xmlns="http://www.springframework.net"><!--这里放容器里面的所有节点--><description>An  example that demonstrates simple IoC features.</description><!--name 必须要唯一的,type=类的全名称,所在的程序集--><object name="UserInfoDal" type="Spring.Net.EFUserInfoDal, Spring.Net"><property name="Name" value="张三"/><!--ref指向下面的属性注入--><property name="UserInfo" ref="UserInfo"/></object>      <!--构造函数注入--><object name="UserInfoDal2" type="Spring.Net.AdoNetUserInfoDal, Spring.Net"><constructor-arg index="0" value="张三"/><constructor-arg index="1" ref="UserInfo"/></object><!--属性注入--><object name="UserInfo" type="Spring.Net.UserInfo, Spring.Net"><property name="Name" value="李四"/><property name="Age" value="15"/></object></objects></spring>
</configuration>

Program.cs

using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;//Spring.Aop.dll 面向切面编程
//Spring.Core.dll spring框架基础
//Common.Logging.dll 这个必须也要引用namespace Spring.Net
{class Program{static void Main(string[] args){//控制权没有反转//IUserInfoDal infoDal = new EFUserInfoDal();//Spring.Net 创建实例的方式转为容器帮我们创建//第一步,引用Spring.Net程序集 Spring.Core.dll 和 Common.Logging.dll//第二步,添加Spring.Net配置节点//第三步,配置object节点//第四步,创建spring容器上下文IApplicationContext ctx = ContextRegistry.GetContext();//第五步,通过容器创建对象IUserInfoDal efDal = ctx.GetObject("UserInfoDal") as IUserInfoDal;efDal.Show();IUserInfoDal adoDal = ctx.GetObject("UserInfoDal2") as IUserInfoDal;adoDal.Show();Console.ReadKey();}}
}

转载于:https://www.cnblogs.com/luohao123/p/8909425.html

Spring.Net学习相关推荐

  1. Spring MVC 学习笔记 对locale和theme的支持

    Spring MVC 学习笔记 对locale和theme的支持 Locale Spring MVC缺省使用AcceptHeaderLocaleResolver来根据request header中的 ...

  2. Spring MVC 学习总结(二)——控制器定义与@RequestMapping详解

    Spring MVC 学习总结(二)--控制器定义与@RequestMapping详解 目录 一.控制器定义 1.1.实现接口Controller定义控制器 1.2.使用注解@Controller定义 ...

  3. Spring Cloud 学习资料收集

    导读 关于Spring Cloud 去年开始逐渐多的出现在我的视线中,随着微服务这个词越来越热,我们或多或少的都听说过这个词,我们可以将Spring Cloud 看做是java 中Spring 为我们 ...

  4. Spring Cloud 学习笔记(四)-Spring Cloud Hystrix

    Spring Cloud 学习笔记(四)-Spring Cloud Hystrix 由于前一阵子项目的原因,今天才继续弄上,今天想学习一下Hystrix组件 这个组件还挺抽象的,最开始我一直没太明白, ...

  5. Spring Integration学习资料

    Spring Integration学习资料 1.1     背景 Spring框架的一个重要主题是控制反转.从广义上来说,Spring处理其上下文中管理的组件的职责.只要组件减轻了职责,它们同时也被 ...

  6. Spring MVC 学习总结(九)——Spring MVC实现RESTful与JSON(Spring MVC为前端提供服务)...

    Spring MVC 学习总结(九)--Spring MVC实现RESTful与JSON(Spring MVC为前端提供服务) 目录 一.JSON 1.1.概要 1.2.使用ModelAndView ...

  7. Spring.NET 学习总结

    spring.net Spring.NET为建立企业级应用提供了一套轻量级的解决方案.通过Spring.NET,我们可以用统一且透明的方式来配置应用程序.Spring.NET的重点是为中间层提供声明式 ...

  8. Spring Boot学习笔记-实践建言

    2019独角兽企业重金招聘Python工程师标准>>> 本文延续<Spring Boot学习笔记-快速示例>,从开发指南中摘出一些实践经验可供参考.这也是笔者看到的眼前一 ...

  9. 八个开源的 Spring Boot 学习资源,你值得拥有

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:什么?你还在使用fastjson,性能太差了个人原创+1博客:点击前往,查看更多 转载自:牧马小子 Spring ...

  10. spring security 学习三-rememberMe

    spring security 学习三-rememberMe 功能:登录时的"记住我"功能 原理: rememberMeAuthenticationFilter在security过 ...

最新文章

  1. Jersey Restful部署到Tomcat注意事项
  2. Oracle中sysdba身份和dba角色区别
  3. 联想、戴尔、惠普等笔记本预装膨胀件 存在安全隐患
  4. vc++怎么可以直接刷掉MBR?搞笑的吧
  5. linux清除网卡记录,linux 清除驱动对网卡的记录
  6. 【Android游戏开发之八】游戏中添加音频-详解MediaPlayer与SoundPool的利弊以及各个在游戏中的用途!...
  7. dns服务器在电脑上有什么作用,DNS服务器是什么 DNS服务器的作用有哪些【详解】...
  8. c语言结果九位数,C语言实例:九位累进可除数
  9. 【剑指offer - C++/Java】3、从尾到头打印链表
  10. Bash、Terminal通过tab忽略大小写自动补全命令行提示
  11. Linux调试工具strace和gdb常用命令小结-转
  12. MySQL复制 自动监控脚本
  13. c语言 异或_C语言位逻辑运算符的四种逻辑:取反,并,或,异或
  14. 如何卸载红蜘蛛多媒体网络教室软件
  15. Hashcat密码破解
  16. seo模拟点击软件_百度搜索SEO优化算法揭秘
  17. mac连不上android手机助手,安卓设备连接不上爱思助手时怎么办?
  18. 包政讲营销录音(2)
  19. NLPCC2013中文微博细粒度情感识别(二)
  20. Jenkins自动化部署(java+maven+tomcat项目)

热门文章

  1. Delphi_04_Delphi_Object_Pascal_基本语法_02
  2. hadoop/hive/hbase 简单区别及应用场景
  3. centos7下安装gcc7
  4. 苹果智能家居大招要来 两年一直没火真相解秘
  5. leetcode:Plus One
  6. Spring IOC 注入方式
  7. 致青春VS杜蕾斯,用QQ空间电影大数据解读关联性
  8. yum安装JAVA centos下使用yum安装jdk
  9. 我一直怀疑这孩子不是我亲生的,眼神太二了
  10. node安装升级过程中遇到的问题汇总