Spring.net的作用是解耦,不用new的方式获取类实例,通常用于三层架构的解耦
使用步骤:
1 新建控制台程序,名为:Spring.Net.Demo1,点中项目利用Nuget下载Spring.Core组件,参考:https://blog.csdn.net/zxy13826134783/article/details/85336968
2 打开App.config,编辑如下:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<!--******************** 新增加的,必须是第一个节点 ************************-->
<configSections>
<!--sectionGroup节点里面的内容是固定的,但这篇博客https://www.cnblogs.com/xiaoai123/p/6692966.html却说name属性是随意取得,我测试了并不能随便起-->
<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"/>
</context>
<objects xmlns="http://www.springframework.net">
<!--object节点的name属性是可以自己取,在主程序就可以通过这个name属性获得实例对象,看主程序中的:context.GetObject("user") as User
对于type类型中的Spring.Net.Demo1.User,Spring.Net.Demo1,其中Spring.Net.Demo1.User是 "要实例化的类名(User)所在的命名空间.要实例的类名(User)",
而Spring.Net.Demo1是要实例化的类名(User)所在的命名空间
-->
<object name="user" type="Spring.Net.Demo1.User,Spring.Net.Demo1">
<!--两个property节点的name属性都必须对应User类中的两个属性-->
<property name="userName" value="张大个"></property>
<property name="userPassword" value="1688888"></property>
</object>
<!--如果需要再增加一个类的话,则再在object节点后面增加相同结构的object节点-->
</objects>
</spring>
<!--********************************* 新增的结束 *******************************-->
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
</startup>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Common.Logging" publicKeyToken="af08829b84f0328e" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-1.2.0.0" newVersion="1.2.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
3 新建一个测试类User,编辑如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Spring.Net.Demo1
{
public class User
{
public string userName { set; get; }
public string userPassword { set; get; }
}
}
4 主程序编辑如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Spring.Context;
using Spring.Context.Support;
namespace Spring.Net.Demo1
{
class Program
{
static void Main(string[] args)
{
//spring.net读取配置文件,获取上下文
IApplicationContext context = ContextRegistry.GetContext();
//从配置文件中读取name属性为user的对象实例,并向上转型为User实例
User user = context.GetObject("user") as User;
Console.WriteLine("userName:" + user.userName + " userPassword:" + user.userPassword);
Console.ReadKey();
}
}
}
6 运行结果如下图:
注意:当把程序拷贝到别的地方运行时,需要把Debug中的与Spring.net相关的3个dll库和与项目同名配置文件一起拷贝。
打开与项目同名的配置文件,发现跟App.config的内容是一模一样的,通过修改这个配置文件,可以实现不重新编译代码的情况下修改User类的属性值