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能做到的不止如此。

 二、DEMO示例

新建一个控制台程序,程序比较简单,直接上代码

老方法

Program.cs

 1 using System;
 2 
 3 namespace Spring.Net.DEMO
 4 {
 5     class Program
 6     {
 7         static void Main(string[] args)
 8         {
 9             IUserInfoDal UserInfo = new UserInfoDal();
10             UserInfo.Show();
11             Console.ReadKey();
12         }
13     }
14 }

IUserInfoDal.cs

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Text;
 4 
 5 namespace Spring.Net.DEMO
 6 {
 7     public interface IUserInfoDal
 8     {
 9         void Show();
10     }
11 }

UserInfoDal.cs

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Text;
 4 
 5 namespace Spring.Net.DEMO
 6 {
 7     public class UserInfoDal : IUserInfoDal
 8     {
 9         public void Show()
10         {
11             Console.WriteLine("越来越帅");
12         }
13     }
14 }

效果

Spring.Net注入方式

 第一步去官网下载Spring.Net程序集

地址:http://www.springframework.net/download.html

1 链接:https://pan.baidu.com/s/1cLjAi0lS_iy1tKRMJIBw0w 
2 提取码:tn3s 
也可以到我百度云盘上下载,包含中文API

第二步:XXXXXXSpring.NET-1.3.1Spring.NETin et4.0 elease下找到 Common.Logging.dll和Spring.Core.dll这两个dll复制到项目中添加引用

第三步:引入命名空间

1 using Spring.Context;
2 using Spring.Context.Support;

第四步(app.config文件):

 1 <?xml version="1.0" encoding="utf-8" ?>
 2 <configuration>
 3   <configSections>
 4     <sectionGroup name="spring">
 5       <section name="context" type="Spring.Context.Support.ContextHandler, Spring.Core"/>
 6       <section name="objects" type="Spring.Context.Support.DefaultSectionHandler, Spring.Core" />
 7     </sectionGroup>
 8   </configSections>
 9   <spring>
10     <context>
11       <!--Spring.Net对象容器的配置(下面这句话表示:容器里的对象,在当前配置文件(Web.config)的spring节点下的objects节点中配置对象)-->
12       <resource uri="config://spring/objects"/>
13     </context>
14     <!--objects:配置的容器里面的对象-->
15     <objects xmlns="http://www.springframework.net">
16       <description>An  example that demonstrates simple IoC features.</description>
17       <!--name起个名字,一般为类的名称;type:左边:命名空间+类名,右边:命名空间-->
18       <object name="IUserInfo" type="SpringDemo.UserInfo, SpringDemo">    </object>
19     </objects>
20   </spring>
21 </configuration>

第五步:创建类与接口

IUserInfoDal.cs(接口)

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Text;
 4 
 5 namespace DEMO
 6 {
 7     public interface IUserInfoDal
 8     {
 9         string Show();
10     }
11 }

UserInfoDal.cs(类)

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Text;
 4 
 5 namespace DEMO
 6 {
 7     public class UserInfoDal : IUserInfoDal
 8     {
 9         public string Show()
10         {
11             return "越来越帅!~";
12         }
13     }
14 }

第六步:实现

 1 using Spring.Context;
 2 using Spring.Context.Support;
 3 using System;
 4 using System.Windows.Forms;
 5 
 6 namespace DEMO
 7 {
 8     public partial class Form1 : Form
 9     {
10         public Form1()
11         {
12             InitializeComponent();
13         }
14 
15         private void Button1_Click(object sender, EventArgs e)
16         {
17             //这句代码让spring.net读取配置文件,自动完成注入和反转操作,创建实例UserInfoDalInstance
18             IApplicationContext ctx = ContextRegistry.GetContext();
19             //我们到所创建的上下文里面拿到我们刚才创建的实例IUserInfo
20             IUserInfoDal dll = ctx.GetObject("IUserInfo") as UserInfoDal;
21             string res = dll.Show();
22         }
23     }
24 }

第七步:搞定!!!

程序中并没有new实例对象,但是已经通过配置文件,正确的实例化了,依赖注入成功。

补充:

属性注入(UserInfoDal.cs):

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 
 7 namespace Demo
 8 {
 9     public class UserInfoDal : IUserInfoDal
10     {
11         public string Name
12         {
13             get;set;
14         }
15 
16         public string Show()
17         {
18             return Name+"越来越帅!~";
19         }
20     }
21 }

配置文件(app.config):

 1 <?xml version="1.0" encoding="utf-8" ?>
 2 <configuration>
 3   <configSections>
 4     <sectionGroup name="spring">
 5       <section name="context" type="Spring.Context.Support.ContextHandler, Spring.Core"/>
 6       <section name="objects" type="Spring.Context.Support.DefaultSectionHandler, Spring.Core" />
 7     </sectionGroup>
 8   </configSections>
 9   <spring>
10     <context>
11       <!--Spring.Net对象容器的配置(下面这句话表示:容器里的对象,在当前配置文件(Web.config)的spring节点下的objects节点中配置对象)-->
12       <resource uri="config://spring/objects"/>
13       <resource uri="file://Dals.xml"/>
14     </context>
15     <!--objects:配置的容器里面的对象-->
16     <objects xmlns="http://www.springframework.net">
17       <description>An  example that demonstrates simple IoC features.</description>
18       <!--name起个名字,一般为类的名称;type:左边:命名空间+类名,右边:命名空间-->
19       <object name="IUserInfo" type="Demo.UserInfoDal, Demo">
20         <!--属性注入,name:属性名称;value:属性的值-->
21         <property name="Name" value="alex"/>
22       </object>
23     </objects>
24   </spring>
25     <startup> 
26         <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
27     </startup>
28 </configuration>

原文地址:https://www.cnblogs.com/chenyanbin/p/11343146.html