.net IoC 之 Spring.Net 适合刚开始使用
Spring.Net包括控制反转(IoC) 和面向切面(AOP),这篇文章主要说下IoC方面的入门。
一、首先建立一个MVC项目名称叫SpringDemo,然后用NuGet下载spring(我用的是Spring.Net NHibernate 4 support)
二、类设计,在Models文件夹下面建立类,主要IUserInfo,UserInfo,Order 三个类代码如下:
public interface IUserInfo
{
string ShowMeg();
}
public class UserInfo : IUserInfo
{
public string UserName { get; set; }
public Order OrderBy { get; set; }
public string ShowMeg()
{
return "姓名:" + UserName + "订单号:" + OrderBy.OrderNo;
}
}
public class Order
{
public string OrderNo { get; set; }
}
三、进入关键的一步:修改配置文件。在web.config里直接修改 如下:
<sectionGroup name="spring">
<!--解析spring块的对象-->
<section name="context" type="Spring.Context.Support.ContextHandler,Spring.Core"/>
<!--配置解析spring存放对象的容器集合-->
<section name="objects" type="Spring.Context.Support.DefaultSectionHandler,Spring.Core"/>
</sectionGroup> </configSections>
<!--****************** Spring 配置开始 ******************-->
<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="UserInfo" type="SpringDemo.Models.UserInfo,SpringDemo">
<property name="UserName" value="老王" />
<!--ref 指向下面的属相注入-->
<property name="OrderBy" ref="Order" />
</object>
<object name="Order" type="SpringDemo.Models.Order,SpringDemo">
<property name="OrderNo" value="20170808" />
</object>
</objects>
</spring>
<!--****************** Spring 配置结束 ******************-->
四、代码测试,新建控制器,代码如下:
public ActionResult Index()
{
IApplicationContext ctx = ContextRegistry.GetContext();
IUserInfo lister = (IUserInfo)ctx.GetObject("UserInfo");
ViewBag.msg = lister.ShowMeg();
return View();
}
五、前台添加显示 @ViewBag.msg 运行结果如下:
六、前已经大功告成,但如果想把配置文件单独出来该怎么弄呢,为了达到测试效果新建一个类NewUserInfo 代码如下:
public class NewUserInfo : IUserInfo
{
public NewUserInfo(string name, Order order)
{
this.UserName = name;
this.OrderBy = order;
} public string UserName { get; set; }
public Order OrderBy { get; set; } public string ShowMeg()
{
return "姓名:" + UserName + "订单号:" + OrderBy.OrderNo;
}
}
七、新建文件夹Config下建立objects.xml 属性设置生成到目录 内容如下:
<?xml version="1.0" encoding="utf-8" ?>
<objects xmlns="http://www.springframework.net">
<!--这里存放容器所有节点-->
<description>An example that demonstrates simple Ioc features</description> <!--构造函数注入-->
<object name="NewUserInfo" type="SpringDemo.Models.NewUserInfo,SpringDemo">
<constructor-arg index="0" value="张学友"/>
<constructor-arg index="1" ref="Order"/>
</object>
<!--复杂依赖注入-->
<object name="Order" type="SpringDemo.Models.Order,SpringDemo">
<property name="OrderNO" value="20170909"/>
</object> </objects>
八、修改web.config 指定objects.xml为解析依赖
<resource uri="~/Config/objects.xml" /><!--指定文档-->
九、在Home控制器下建立Action NewUserInfo 代码如下:
public ActionResult NewUserInfo()
{
IApplicationContext ctx = ContextRegistry.GetContext();
IUserInfo lister = (IUserInfo)ctx.GetObject("NewUserInfo");
ViewBag.msg = lister.ShowMeg();
return View();
}
十、前台添加显示 @ViewBag.msg 运行结果如下:
总结:IoC给我们带来了很多的方便,当我们觉得使用简单工厂不好的时候,可以用IoC来代替,而且大部分都支持AOP。
祝君好运
.net IoC 之 Spring.Net 适合刚开始使用的更多相关文章
- Spring源码-IOC部分-Spring是如何解决Bean循环依赖的【6】
实验环境:spring-framework-5.0.2.jdk8.gradle4.3.1 Spring源码-IOC部分-容器简介[1] Spring源码-IOC部分-容器初始化过程[2] Spring ...
- .net Ioc 之 Unity 适合刚开始使用
介绍: 首先稍微介绍一下,Unity是微软patterns& practices组用C#实现的轻量级.可扩展的依赖注入容器,可通过代码或xml配置文件来配置对象之间的关系.那么通过一个简单的代 ...
- IoC in Spring
写两个关于Spring中使用IoC的小例子,一个是半动态创建Bean,另一个是全动态创建Bean,它们适合不同的应用场景. 一.半动态:在一个实际项目中遇到过这样的问题,项目组开发的某个系统具备在LE ...
- 死磕Spring之IoC篇 - Spring 应用上下文 ApplicationContext
该系列文章是本人在学习 Spring 的过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释 Spring 源码分析 GitHub 地址 进行阅读 Spring 版本:5.1. ...
- Spring学习3—控制反转(IOC)Spring依赖注入(DI)和控制反转(IOC)
一.思想理解 Spring 能有效地组织J2EE应用各层的对象.不管是控制层的Action对象,还是业务层的Service对象,还是持久层的DAO对象,都可在Spring的 管理下有机地协调.运行.S ...
- spring ioc 原理 spring aop原理
大家一直都说spring的IOC如何如何的强大,其实我倒觉得不是IOC如何的强大,说白了IOC其实也非常的简单.我们先从IOC说起,这个概念其实是从我们平常new一个对象的对立面来说的,我们平常使用对 ...
- AS3 IOC框架Spring Actionscript 的使用总结
Spring Actionscript 是众多围绕依赖注入提供解决方案的Flex控制反转框架之一 AS3 下经典的IOC框架有Spring ActionScript.Parsley.Flicc和Swi ...
- 关于怎么快速学好Android应用程序开发及其其他编程语言(大牛和高手勿喷,此篇文章也适合刚入门小师弟和小师妹)
无论你是从.NET转过来的也好 还是从PHP转过来的等等等,能看到这篇文章的人一般都是想快速转行到Android应用程序开发,希望我的这篇文章能勉励到各位的同时,也能勉励我自己. 1.编程语言基本都会 ...
- Spring IOC和Spring AOP的实现原理(源码主线流程)
写在前面 正本文参考了<spring技术内幕>和spring 4.0.5源码.本文只描述原理流程的主线部分,其他比如验证,缓存什么可以具体参考源码理解. Spring IOC 一.容器初始 ...
随机推荐
- 2015-9-13 NOIP模拟赛解题报告(by hzwer)
小奇挖矿 「题目背景」 小奇要开采一些矿物,它驾驶着一台带有钻头(初始能力值w)的飞船,按既定路线依次飞过喵星系的n个星球. 「问题描述」 星球分为2类:资源型和维修型. 1.资源型:含矿物质量a[i ...
- ELK-Filebeat使用
Beats是用于单用途数据托运人的平台.它们以轻量级代理的形式安装,并将来自成百上千台机器的数据发送到Logstash或Elasticsearch. (画外音:通俗地理解,就是采集数据,并上报到Log ...
- java集合类学习笔记之HashMap
1.简述 HashMap是java语言中非常典型的数据结构,也是我们平常用的最多的的集合类之一.它的底层是通过一个单向链表(Node<k,v>)数组(也称之为桶bucket,数组的长度也叫 ...
- 扩展欧拉定理【洛谷P4139】 上帝与集合的正确用法
P4139 上帝与集合的正确用法 \(2^{2^{2^{\dots}}}\bmod p\) 卡最优解倒数第一祭. 带一下扩展欧拉定理就好了. code: #include <iostream&g ...
- 【BZOJ1055】[HAOI2008]玩具取名(区间DP)
[HAOI2008]玩具取名 题目描述 某人有一套玩具,并想法给玩具命名.首先他选择\(WING\)四个字母中的任意一个字母作为玩具的基本名字.然后他会根据自己的喜好,将名字中任意一个字母用" ...
- js控制输入框只能输入数字不能输入其他字符
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 自己动手——快速搭建Android应用服务器
1.服务器搭建方案选择 我们用:MySQL + Java Web + Tomcat + Volley 来实现我们的服务器. 其中:①MySQL是开源的数据库软件:②Java Web是遵循Java语言风 ...
- 洛谷 P3201 [HNOI2009]梦幻布丁(启发式合并)
题面 luogu 题解 什么是启发式合并? 小的合并到大的上面 复杂度\(O(nlogn)\) 这题颜色的修改,即是两个序列的合并 考虑记录每个序列的\(size\) 小的合并到大的 存序列用链表 但 ...
- 洛谷 P3975 / loj 2102 [TJOI2015] 弦论 题解【后缀自动机】【拓扑排序】
后缀自动机入门. 题目描述 为了提高智商,ZJY 开始学习弦论. 这一天,她在<String theory>中看到了这样一道问题:对于一个给定的长度为 \(n\) 的字符串,求出它的第 \ ...
- redis的主从同步
一.redis的主从操作流程 1. 准备三个redis配置文件 #进入redis的配置文件夹,准备好这几个文件,6379不用管,默认的,和这次操作无关 [root@qishi ~]# cd /etc/ ...