简介
Spring.Net的在线手册简介如下:
即使有先进的工具和技术,软件开发也是一件相当令人头疼的工作。Spring.NET为建立企业级应用提供了一套轻量级的解决方案。通过Spring.NET,我们可以用统一且透明的方式来配置应用程序,并在应用中集成AOP的功能。Spring.NET的重点是为中间层提供声明式事务管理,以及一个功能齐全的ASP.NET扩展框架。
Spring.NET可以为很多领域的企业级应用开发提供“一站式服务”。虽然功能强大,Spring.NET仍然是模块化的,允许单独使用其中的任一部分。在使用IoC容器来配置应用程序时,我们既可以用传统的ADO.NET来访问数据库,也可以使用Spring.NET的Hibernate集成代码或ADO.NET抽象层来访问数据库。Spring.NET是非侵入式的,代码对框架本身不会产生任何依赖(或者只需要极少的依赖,取决于应用的范畴)。
通过上面的说明我们可以知道,在软件开发中可以借助其进行关键类的创建,降低数据层与业务逻辑层的耦合,在一定程度上减少二次开发的难度。
实例说明
下面我们通过一个简单的Demo进行说明一下SpringNet的使用。
- 获取SpringNet动态链接库。
- NuGet方式获取(搜索Spring.Core)
- 手工下载后,添加到项目的引用中(添加Bin\Release目录下Common.Logging.dll和Spring.Core.dll到项目中)
NuGet方式获取
- 创建一个空白解决方案,并命名为SpringNetDemo
- 添加一个桌面应用程序,并命名为SpringNetApp
- 添加一个接口,并命名为IUserInfoService.cs
- 添加一个类,并命名为Person.cs
- 添加一个类,并命名为UserInfoService.cs
- 添加一个应用程序配置文件,并命名为App.Config
- 添加一个xml文件,并命名为Services.xml
我们做如下修改:
- 在IUserInfoService接口中定义一个方法;
- 在Person类中声明一个UserName属性;
- 在UserInfoService类中定义一个属性Age,并让UserInfoService继承IUserInfoService并去实现showMsg这个方法;
- 接下来我们分别为App.Config和Services.xml进行配置,实现通过SpringNet进行相关接口的创建;
- 通过IApplicationContext接口下的GetObject方法即可实现在不创建类的情况下,完成类的相关属性、方法等的调用。
核心代码:
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 6 namespace SpringNetApp 7 { 8 public interface IUserInfoService 9 { 10 /// <summary> 11 /// 展示相关信息 12 /// </summary> 13 string showMsg(); 14 } 15 }
IUserInfoService.cs
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace SpringNetApp { public class Person { public string UserName { get; set; } } }
Person
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows.Forms; namespace SpringNetApp { public class UserInfoService : IUserInfoService { /// <summary> /// 用户年龄信息 /// </summary> public int Age { get; set; } /// <summary> /// 人类 /// </summary> public Person person { get; set; } /// <summary> /// 展示一段信息,并根据用户名和年龄动态加载 /// </summary> public string showMsg() { return "Hi this is my first SpringNet Test Demo and I am " + person.UserName + " " + Age + " years old !"; } } }
UserInfoService.cs
<?xml version="1.0" encoding="utf-8" ?> <configuration> <!--- 配置SpringNet 开始 --> <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> <context> <resource uri="config://spring/objects"/> <resource uri="file://Services.xml"/> </context> <objects xmlns="http://www.springframework.net" > </objects> </spring> <!--- 配置SpringNet 结束 --> </configuration>
App.Config
<?xml version="1.0" encoding="utf-8" ?> <objects xmlns="http://www.springframework.net"> <description>An example that demonstrates simple IoC features.</description> <!-- 单独写在此处主要为了和后续维护的方便 --> <object name="UserInfoService" type="SpringNetApp.UserInfoService, SpringNetApp"> <property name="Age" value="29" /> <property name="Person" ref="Person" /> </object> <object name="Person" type="SpringNetApp.Person, SpringNetApp"> <property name="UserName" value="Jeremy.Wu" /> </object> </objects>
Services.xml
using Spring.Context; using Spring.Context.Support; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace SpringNetApp { public partial class FrmMain : Form { public FrmMain() { InitializeComponent(); } /// <summary> /// 测试一下 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void button1_Click(object sender, EventArgs e) { // 返回的就是一个已经根据<objects/>节点的内容配置好的容器对象 IApplicationContext ctx = ContextRegistry.GetContext(); IUserInfoService lister = (IUserInfoService)ctx.GetObject("UserInfoService"); MessageBox.Show(lister.showMsg(), "Infomation", MessageBoxButtons.OK, MessageBoxIcon.Information); } } }
FrmMain.cs
运行效果:
作者:Jeremy.Wu
出处:https://www.cnblogs.com/jeremywucnblog/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。