前言
SpringNet概念
在控制台程序中使用SpringNet
创建应用和类
添加spring程序集引用
配置SpringNet文件
Program里面代码
SpringNet运行示例
深入了解SpringNet
总结
前言
在.net中,创建对象最常用的方法是new类的实例。这样做有违“层与层之间松耦合”的原则。Spring应用了IOC、DI的概念,提供了一种新的创建对象的方式。
接下来在控制台应用程序里面简单使用spring.net控制反转、依赖注入的方式来创建对象,根据代码来一步步理解Spring.net在我们应用程序中做了什么。
如果介绍错误,请不吝赐教,万分感谢。
Spring.Net概念
我们先来讲IOC、DI
IoC:控制反转
原来创建对象的权利由程序来控制就是new实例,IoC就是改由容器来创建,相当于一个工厂,
DI:依赖注入
没有IoC就没有DI,DI:容器在创建对象时,通过读取配置文件(一般是xml)设置的默认值,使其在创建时就拥有了某些注入的值。
什么是Spring.net?
spring是一个依赖注入的设计框架,使项目层与层之间解耦达到更灵活的使用。Spring.net是Spring中支持.net开发的框架。
Spring.net是一个企业级的重型依赖注入框架应用框架。Spring.Net会让应用性能下降,不过它的灵活的优点远大于缺点。适合用来做企业的oa系统之类的。
Spring.net能够干什么?
在core(核心)和AOP(模型支持,属性反转,接受注入)之上支持:
1, MSQ(消息队列)
2, MVC
3, WEB
4, Quartz.net
Spring.net能做到的不止如此。
在控制台程序中使用Spring.Net
创建应用和类
UserInfoDal就是所要用到的类,类内容如下:
using System;
namespace SpringNetDemo
{
public class UserInfoDal
{
public string Name { get; set; }
public string Name2 { get; set; }
public UserInfoDal(string name,string name2)
{
Name = name;
Name2 = name2;
}
public void Show()
{
Console.WriteLine(Name+"====="+ Name2);
}
}
}
添加spring程序集引用
Spring.net核心程序集是Common.Logging.dll和Spring.Core.dll,当然如果是在MVC中使用的话需要相应版本的Spring.Web.Mvc.dll。
对于程序集的引用下官网的示例工程获得,我们也可以通过NuGet直接安装到我们的应用里面。
这里使用的是MVC4就安装相应的程序集。输入以下指令
packages包里面多了下面5个文件夹
这些就是Spring.net的所有相关的程序集了。我们在里面添加自己所需的引用,前三个是必须要用到的,后面两个如果是做网站的话可以引用。
配置Spring.Net文件
在应用的配置文件中添加spring的所需的节点:
在下面的spring节点中进行配置:
context节点是用来指定objects节点的位置的,有config(当前配置文件内)、file(文件)、assembly(程序集)。config是在当前配置文件内直接object配置节点信息。但是往往objects节点配置信息很大并且不同层的配置不同,所以可以把objects节点配置信息写在单独的文件内,用file、assembly来指向你的配置文件。
这里是直接在应用配置文件内配置:
接下来配置objects的节点信息。objects可以包含多个object子节点,每一个object都是一次注入和实例化的操作。
<objects xmlns="http://www.springframework.net">
<!--type指向的是你想要实例化的类,是你前面是类的全名称,后面是所在程序集
name是你所要创建实例的名字。-->
<object name="UserInfoDalInstance" type="SpringNetDemo.UserInfoDal,SpringNetDemo">
<!--构造函数注入-->
<constructor-arg index="0" value="参数Name" />
<constructor-arg index="1" value="参数Name2" />
<!--属性注入-->
<property name="Name" value="我是名字" />
</object>
<!--<object name="UserInfoBll" type="SpringNetDemo.UserInfoBll,SpringNetDemo">
--><!--复杂属性注入--><!--
<property name="UserInfoDal" ref="UserInfoDal" />
</object>-->
</objects>
Program里面代码:
using Spring.Context;
using Spring.Context.Support;
using System;
namespace SpringNetDemo
{
class Program
{
static void Main(string[] args)
{
#region 原来创建实例的方式
//UserInfoDal UserInfoDalInstance = new UserInfoDal(“Name1”,“Name2”);
#endregion
#region 使用Spring.net提供的方法
//这句代码让spring.net读取配置文件,自动完成注入和反转操作,创建实例UserInfoDalInstance
IApplicationContext ctx = ContextRegistry.GetContext();
//我们到所创建的上下文里面拿到我们刚才创建的实例UserInfoDalInstance
UserInfoDal dal = ctx.GetObject(“UserInfoDalInstance”) as UserInfoDal;
dal.Show();
Console.ReadLine();
#endregion
}
}
}
Spring.Net运行示例
程序中并没有new实例对象,但是已经通过配置文件,正确的实例化了,并且正确的传入了参数。Name2的值为”参数Name2”说明构造函数注入成功,Name值为“我是名字”说明属性注入成功。
深入了解Spring.Net
这是一个怎样的过程?
依赖注入:
![在这里插入图片描述](https://img-blog.csdn.net/20171008160705997?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzQ3MjA3NTk=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
控制反转:
![在这里插入图片描述](https://img-blog.csdn.net/20171008160817751?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzQ3MjA3NTk=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
这里就相当于以下代码:
UserInfoDal UserInfoDalInstance = new UserInfoDal(“参数Name”, “参数Name2”);
UserInfoDalInstance.Name = “我是名字”;
这里name值是可选的,因为某些场合只需要注入就好了而不需要创建实例,比如MVC的Controller。
2. 是何时创建实例UserInfoDalInstance ?
程序中明明没有UserInfoDalInstance,那么为什么能够使用呢?不,我们程序中已经有了UserInfoDalInstance,Spring.net已经帮我们保存了配置文件中所有的实例。
程序中有这段代码:
IApplicationContext ctx = ContextRegistry.GetContext();
UserInfoDal dal = ctx.GetObject(“UserInfoDalInstance”) as UserInfoDal;
打开它的元数据信息,看看GetContext()方法做了什么。
看下谷歌对备注的翻译:
我们可以知道,这句话读取了配置文件并做了基本工作。
看下GetObject是从哪里得到实例UserInfoDalInstance的
摘要指出UserInfoDalInstance是根据在配置文件的object name生成的。这和上面推断的不错。
总结:
步骤:
- 添加引用
- 配置节点
- 使用spring.net帮我们创建好的实例。
注意:
当读取配置文件时,就已经创建好了实例UserInfoDalInstance。
作者:等待临界
来源:CSDN
原文:https://blog.csdn.net/qq_34720759/article/details/78171134
版权声明:本文为博主原创文章,转载请附上博文链接!