• Spring.Net简单用法


      Spring.Net其实就是抽象工厂,只不过更加灵活强大,性能上并没有明显的区别。

      它帮我们实现了控制反转。

      其有两种依赖注入方式。

        第一:属性注入

        第二:构造函数注入

      首先,我们去  Spring.net下载 您要的版本。 

      现在,我们创建一个控制台应用程序,并命名为 Spring.Net_Demo

      其次,我们在引入Spring.NET=>bin=>net=>4.0=>release文件夹下的Common.Logging.dll和Spring.Core.dll两个程序集。

      我们先来说最普通的通过其实现工厂中的实例。

      1:并在当前程序下,创建一个命名 IUserDAL 接口 ,并约束一个命名为 Show 的方法

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.Threading.Tasks;
     6 
     7 namespace Spring.Net_Demo
     8 {
     9     public interface IUserDAL
    10     {
    11         
    12         void Show();
    13     }
    14 }

      2:其次,我们在创建一命名 UserDAL 类,并实现接口 IUserDAL 中的Show 的方法

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.Threading.Tasks;
     6 
     7 namespace Spring.Net_Demo
     8 {
     9     public class UserDAL : IUserDAL
    10     {
    11       
    12         public void Show()
    13         {
    14             Console.WriteLine("我是UserDAL");
    15         }
    16     }
    17 }

      3:接下来,重点就是配置,现在我们配置好App.config

     1 <?xml version="1.0" encoding="utf-8" ?>
     2 <configuration>
     3     <!--Spring.Net中注释,不然报错-->
     4   
     5     <!-- <startup> 
     6         <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
     7     </startup> -->
     8   
     9   <!--Spring.Net块配置-->
    10      <configSections>
    11         <sectionGroup name="spring">
    12             <section name="context" type="Spring.Context.Support.ContextHandler, Spring.Core"/>
    13             <section name="objects" type="Spring.Context.Support.DefaultSectionHandler, Spring.Core" />
    14         </sectionGroup>
    15     </configSections>
    16     
    17  <spring>
    18 
    19         <context>
    20             <resource uri="config://spring/objects"/> 
    21         </context>
    22    
    23         <objects  >
    24           
    25           <!--这里的name属性,一般是对应类名,等下获取得时候对应,type中 Spring.Net_Demo.UserDAL 是 UserDAL 的类全名称,Spring.Net_Demo其程序集-->
    26    <object name="UserDAL" type="Spring.Net_Demo.UserDAL,Spring.Net_Demo">
    27     
    28   </object>  
    29           
    30   
    31         </objects>
    32     </spring>
    33 
    34 </configuration>

        4:然后我们在Program.cs中调用一下

        //这里是初始化
       IApplicationContext context = ContextRegistry.GetContext();
       创建UserDAL实例 IUserDAL userDAL
    = context.GetObject("UserDAL") as IUserDAL;
      //调用其方法 userDAL.Show(); Console.WriteLine(
    "我是Spring.Net注入方法!");

           4:现在我们可以看到结果

      

    -----------------------------------------------------------属性依赖注入(简单值)--------------------------------------------------------------------

      现在,我们来看看通过其属性依赖输入。

      首先,我们修改下UserDAL类,添加一个属性,并在Show方法中输出。

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.Threading.Tasks;
     6 
     7 namespace Spring.Net_Demo
     8 {
     9     public class UserDAL : IUserDAL
    10     {
    11         public string Name { get; set; }
    12         public void Show()
    13         {
    14             Console.WriteLine("我是UserDAL"+Name); 
    15         }
    16     }
    17 }

      其次,我们修改下App.config配置文件在object节点下,添加一个 <property name="Name" value="我是属性Name哦"></property>

      具体过程请仔细看代码。

    <?xml version="1.0" encoding="utf-8" ?>
      <configuration>
         <!--Spring.Net中注释,不然报错-->
       
         <!-- <startup> 
              <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
          </startup> -->
        
        <!--Spring.Net块配置-->
          <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"/> 
            </context>
       
             <objects  >
               
               <!--这里的name属性,一般是对应类名,等下获取得时候对应,type中 Spring.Net_Demo.UserDAL 是 UserDAL 的类全名称,Spring.Net_Demo其程序集-->
        <object name="UserDAL" type="Spring.Net_Demo.UserDAL,Spring.Net_Demo">
               <!--这里通过给Name或ID属性,名字必须一致,我们简单给个值为“我是属性Name哦”-->
                      <property name="Name" value="我是属性Name哦"></property>
        
      </object>  
               
      
             </objects>
         </spring>
     
     </configuration>            

      最后,在Program.cs调用不变,直接运行,结果如下:

      我们可以看到,其在App.config中就是给属性赋值操作了。

    -----------------------------------------------------------属性依赖注入(复杂值)--------------------------------------------------------------------

      其属性注入,还可以注入更复杂的值。

      例如,我们在添加一个命名为:UserServer 的类。并添加一个UserDAL的属性,并添加方法Show中输出UserDAL中Name

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.Threading.Tasks;
     6 
     7 namespace Spring.Net_Demo
     8 {
     9    public class UserServer
    10     {
    11         public UserDAL userDAL { set; get; }
    12         public  void Show()
    13         {
    14             Console.WriteLine("我是UserServer"+userDAL.Name); 
    15         }
    16     }
    17 }

      现在,我们该改造下App.config。详情请看代码。

    <?xml version="1.0" encoding="utf-8" ?>
      <configuration>
         <!--Spring.Net中注释,不然报错-->
       
         <!-- <startup> 
              <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
          </startup> -->
        
        <!--Spring.Net块配置-->
          <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"/> 
            </context>
       
             <objects  >
               
               <!--这里的name属性,一般是对应类名,等下获取得时候对应,type中 Spring.Net_Demo.UserDAL 是 UserDAL 的类全名称,Spring.Net_Demo其程序集-->
        <object name="UserDAL" type="Spring.Net_Demo.UserDAL,Spring.Net_Demo">
               <!--这里通过给Name或ID属性,名字必须一致,我们简单给个值为“我是属性Name哦”-->
                      <property name="Name" value="我是属性Name哦"></property>
        
      </object>  
               
            <!--这里我们在添加一个节点,属性注入复杂属性 -->
               <object name="UserServer" type="Spring.Net_Demo.UserServer,Spring.Net_Demo">
        <!--这里属性直接指向UserDAL节点,Name属性必须对应 -->
                     <property name="UserDAL" ref="UserDAL"></property> 
                </object>
    
    
      
             </objects>
         </spring>
     
     </configuration>         

       现在,我们还需修改下Program.cs代码,因为我们现在是注入UserServer

    1  IApplicationContext context = ContextRegistry.GetContext();
    2             //IUserDAL userDAL = context.GetObject("UserDAL") as IUserDAL; 
    3         //现在是注入UserServer
    4             UserServer userDAL = context.GetObject("UserServer") as UserServer;
    5             userDAL.Show();
    6             Console.WriteLine("我是Spring.Net注入方法!");        

    我们可以看到,结果跟上面简单属性注入是一样。

    -----------------------------------------------------------构造函数依赖注入--------------------------------------------------------------------

      构造函数注入,其实也差不多。首先,我们修改下UserDAL代码。

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.Threading.Tasks;
     6 
     7 namespace Spring.Net_Demo
     8 {
     9     public class UserDAL : IUserDAL
    10     {
    11         public string Name { get; set; }
    12 
    13         //这里添加一个构造函数
    14         public UserDAL(string name)
    15         {
    16             Name = name;
    17         }
    18 
    19         public void Show()
    20         {
    21             Console.WriteLine("我是UserDAL"+Name); 
    22         }
    23     }
    24 }

     接下来,我们依然是要修改下App.config配置文件。

    <?xml version="1.0" encoding="utf-8" ?>
      <configuration>
         <!--Spring.Net中注释,不然报错-->
       
         <!-- <startup> 
              <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
          </startup> -->
        
        <!--Spring.Net块配置-->
          <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"/> 
            </context>
       
             <objects  >
               <!--我们注释掉这一部分-->
    <!--这里的name属性,一般是对应类名,等下获取得时候对应,type中 Spring.Net_Demo.UserDAL 是 UserDAL 的类全名称,Spring.Net_Demo其程序集 <object name="UserDAL" type="Spring.Net_Demo.UserDAL,Spring.Net_Demo"> 这里通过给Name或ID属性,名字必须一致,我们简单给个值为“我是属性Name哦 <property name="Name" value="我是属性Name哦"></property> </object> --> <!--这里为构造函数注入,两个选择一个就可,不在细说,有注释--> <object> <!--构造函数注入 Name不区分大小,对应构造参数名 --> <constructor-arg name="name" value="构造函数注入"></constructor-arg> <!-- 构造函数注入,需声明构造, 可直接用index=0 --> <!-- <constructor-arg index="0" value="构造函数注入"></constructor-arg> --> </object> <!--这里我们在添加一个节点,属性注入复杂属性 --> <object name="UserServer" type="Spring.Net_Demo.UserServer,Spring.Net_Demo"> <!--这里属性直接指向UserDAL节点,Name属性必须对应 --> <property name="UserDAL" ref="UserDAL"></property> </object> </objects> </spring> </configuration>

    接下,调用代码无需改变,我们看下结果。

     -----------------------------------------------------------外部引入XML文件--------------------------------------------------------------------

        如果越来越多类,我们要注入,在配置文件里不会越来越多注入声明吗?

        我们可以独立把这些独立放在一个XML文件里,然后在配置文件里声明块就可以了。

         首先,我们新建一个Server.xml,在里面放入<objects>节点的所有代码。

        当然,您可以新建多个,比如在三层中,一个是DAL层,一个是BLL层等等,这里就不怎么一一展示了。

        (这里需注意下,因为我的是控制台应用程序,需右键这个XML文件,修改其属性《生成操作=> 嵌入的资源》)。

     1 <?xml version="1.0" encoding="utf-8" ?>
     2 <objects>
     3   
     4   <object name="UserDAL" type="Spring.Net_Demo.UserDAL,Spring.Net_Demo">
     5     
     6     
     7     <!--构造函数注入 可直接用index=0-->
     8     <constructor-arg index="0" value="外部引入哦"></constructor-arg>
     9   </object>
    10   
    11 </objects>

         然后修改下App.comfig ,详情请看代码

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
        <!--Spring.Net中注释,不然报错-->
      
        <!-- <startup> 
            <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
        </startup> -->
      
      <!--Spring.Net块配置-->
         <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"/>
              
                <!-- 外部XML文件引入,在控制台中,同时需把文件属性中的生成操作改成'嵌入资源'-->
               <resource uri="assembly://Spring.Net_Demo/Spring.Net_Demo/Server.xml"/>
            </context> 
        </spring>
    
    </configuration>

        调用的话,不需要任何改变。

               本文结束。  

        以上两种注入方法,虽然有点啰嗦,勿介意哈,老鸟飘过哈。 

        

        

  • 相关阅读:
    利用Filter和拦截器,将用户信息动态传入Request方法
    Spring统一返回Json工具类,带分页信息
    ASP.NET MVC4 学习记录
    lightgbm 的简单实践案例
    numpy和pandas 各种比较常见的用法总结
    【数据预处理】如何将某一类别特征的极少数类别归为一类
    十大经典算法之Apriori 算法
    常用函数框架
    【解决方案】django初始化执行python manage.py migrate命令后,除default数据库之外的其他数据库中的表没有创建出来
    【解决方案】M2Crypto不支持python3
  • 原文地址:https://www.cnblogs.com/wzf-Code/p/5574046.html
Copyright © 2020-2023  润新知