zoukankan      html  css  js  c++  java
  • 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>

  • 相关阅读:
    OpenCV (十二)阈值操作
    OpenCV (十一)图像金字塔
    OpenCV (十)提取水平线与垂直线
    OpenCV (九)形态学操作:开操作,闭操作,形态学梯度,顶帽,黑帽
    电商平台资料学习
    四、eslint配置rules
    三、export和export default区别
    二、安装国际化
    一、vue安装
    vue执行命令时提示错误——vue : 无法加载文件 C:UsersAdministratorAppDataRoaming pmvue.ps1,因为在此系统上禁止运行脚本
  • 原文地址:https://www.cnblogs.com/chenyanbin/p/11343146.html
Copyright © 2011-2022 走看看