Spring.Net 簡單入門學習

Spring.Net 簡單入門學習

轉載於:點擊打開鏈接

Spring.NET IoC容器的用法。

通過簡單的例子學習Spring.Net

1、先創建一個控制檯程序項目。

2、添加IUserInfoDal 接口。

namespace Spring.Net
{
    public interface IUserInfoDal
    {
        void Show();
    }
}

3、添加AdoNetUserInfoDal類和EFUserInfoDal類,繼承IUserInfoDal接口。

AdoNetUserInfoDal.cs

public class AdoNetUserInfoDal:IUserInfoDal
    {
        public void Show()
        {
            Console.WriteLine("我是 AdoNet Dal );
        }
    }
EFUserInfoDal.cs

public class EFUserInfoDal: IUserInfoDal
    {
        public void Show()
        {
            Console.WriteLine("我是EF Dal);
        }     
    }

4、引用Spring.Net程序集 Spring.Core.dll 和 Common.Logging.dll

5、添加Spring.Net配置節點,配置object節點

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <!--一定要在緊跟着configuration下面添加-->
  <configSections>
    <!--跟下面Spring.Net節點配置是一一對應關係-->
    <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>
  
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>

  <!--Spring.Net節點配置-->
  <spring>
    <context>
      <!--容器配置-->
      <resource uri="config://spring/objects"/>
    </context>
    <objects xmlns="http://www.springframework.net">
      <!--這裏放容器裏面的所有節點-->
      <description>An  example that demonstrates simple IoC features.</description>
      <!--name 必須要唯一的,type=類的全名稱,所在的程序集-->
      <object name="UserInfoDal" type="Spring.Net.EFUserInfoDal, Spring.Net">
      </object>      
  </spring>
</configuration>

6、開始寫主函數,創建spring容器上下文
namespace Spring.Net
{
    class Program
    {
        static void Main(string[] args)
        {
            //控制權沒有反轉
            //IUserInfoDal infoDal = new EFUserInfoDal();


            //Spring.Net 創建實例的方式轉爲容器幫我們創建
            //創建spring容器上下文
            IApplicationContext ctx = ContextRegistry.GetContext();
            //通過容器創建對象
            IUserInfoDal efDal = ctx.GetObject("UserInfoDal") as IUserInfoDal;
            efDal.Show();
            Console.ReadKey();
        }
    }
}



7、屬性注入

<!--Spring.Net節點配置-->
  <spring>
    <context>
      <!--容器配置-->
      <resource uri="config://spring/objects"/>
    </context>
    <objects xmlns="http://www.springframework.net">
      <!--這裏放容器裏面的所有節點-->
      <description>An  example that demonstrates simple IoC features.</description>
      <!--name 必須要唯一的,type=類的全名稱,所在的程序集-->
      <object name="UserInfoDal" type="Spring.Net.EFUserInfoDal, Spring.Net">
        <property name="Name" value="張三"/>
        <!--ref指向下面的屬性注入-->
        <property name="UserInfo" ref="UserInfo"/>
      </object>      


      <!--屬性注入-->
      <object name="UserInfo" type="Spring.Net.UserInfo, Spring.Net">
        <property name="Name" value="李四"/>
        <property name="Age" value="15"/>
      </object>
    </objects>
  </spring>

8、構造函數注入

<!--構造函數注入-->
<object name="UserInfoDal2" type="Spring.Net.AdoNetUserInfoDal, Spring.Net">
   <constructor-arg index="0" value="張三"/>
   <constructor-arg index="1" ref="UserInfo"/>
</object>

9、容器配置

複製代碼
<context>
   <!--容器配置-->
   <resource uri="config://spring/objects"/>
   <!--xml文件方式,更改屬性,複製到輸出目錄:始終複製-->
   <!--<resource uri="file://objects.xml"/>-->
   <!--嵌入程序集方式,assembly://程序集名/項目名/objects.xml,更改屬性,始終複製,生成操作,嵌入的資源-->
   <!--<resource uri="assembly://Spring.Net/Spring.Net/objects.xml"/>-->
</context>
複製代碼

10、完整例子

IUserInfoDal.cs

複製代碼
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Spring.Net
{
    public interface IUserInfoDal
    {
        UserInfo UserInfo { get; set; }
        string Name { get; set; }

        void Show();
    }
}
複製代碼

AdoNetUserInfoDal.cs

複製代碼
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Spring.Net
{
    public class AdoNetUserInfoDal:IUserInfoDal
    {
        public AdoNetUserInfoDal(string name, UserInfo userInfo)
        {
            Name = name;
            UserInfo = userInfo;
        }
        public UserInfo UserInfo { get; set; }
        public string Name { get; set; }

        public void Show()
        {
            Console.WriteLine("我是 AdoNet Dal ,屬性注入:Name=" + Name);
            Console.WriteLine("UserInfo ,Name=" + UserInfo.Name + " Age=" + UserInfo.Age);
        }
    }
}
複製代碼

EFUserInfoDal.cs

複製代碼
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Spring.Net
{
    public class EFUserInfoDal: IUserInfoDal
    {
        public EFUserInfoDal()
        {

        }
        public UserInfo UserInfo { get; set; }
        public string Name { get; set; }

        public void Show()
        {
            Console.WriteLine("我是EF Dal,屬性注入:Name=" + Name);
            Console.WriteLine("UserInfo ,Name=" + UserInfo.Name + " Age=" + UserInfo.Age);
        }     
    }
}
複製代碼

App.config

複製代碼
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <!--一定要在緊跟着configuration下面添加-->
  <configSections>
    <!--跟下面Spring.Net節點配置是一一對應關係-->
    <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>
  
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>

  <!--Spring.Net節點配置-->
  <spring>
    <context>
      <!--容器配置-->
      <resource uri="config://spring/objects"/>
      <!--xml文件方式,更改屬性,複製到輸出目錄:始終複製-->
      <!--<resource uri="file://objects.xml"/>-->
      <!--嵌入程序集方式,assembly://程序集名/項目名/objects.xml,更改屬性,始終複製,生成操作,嵌入的資源-->
      <!--<resource uri="assembly://Spring.Net/Spring.Net/objects.xml"/>-->
    </context>
    <objects xmlns="http://www.springframework.net">
      <!--這裏放容器裏面的所有節點-->
      <description>An  example that demonstrates simple IoC features.</description>
      <!--name 必須要唯一的,type=類的全名稱,所在的程序集-->
      <object name="UserInfoDal" type="Spring.Net.EFUserInfoDal, Spring.Net">
        <property name="Name" value="張三"/>
        <!--ref指向下面的屬性注入-->
        <property name="UserInfo" ref="UserInfo"/>
      </object>      
      
      <!--構造函數注入-->
      <object name="UserInfoDal2" type="Spring.Net.AdoNetUserInfoDal, Spring.Net">
        <constructor-arg index="0" value="張三"/>
        <constructor-arg index="1" ref="UserInfo"/>
      </object>

      <!--屬性注入-->
      <object name="UserInfo" type="Spring.Net.UserInfo, Spring.Net">
        <property name="Name" value="李四"/>
        <property name="Age" value="15"/>
      </object>
    </objects>
  </spring>
</configuration>
複製代碼

Program.cs

複製代碼
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

//Spring.Aop.dll 面向切面編程
//Spring.Core.dll spring框架基礎
//Common.Logging.dll 這個必須也要引用

namespace Spring.Net
{
    class Program
    {
        static void Main(string[] args)
        {
            //控制權沒有反轉
            //IUserInfoDal infoDal = new EFUserInfoDal();

            //Spring.Net 創建實例的方式轉爲容器幫我們創建
            //第一步,引用Spring.Net程序集 Spring.Core.dll 和 Common.Logging.dll
            //第二步,添加Spring.Net配置節點
            //第三步,配置object節點
            //第四步,創建spring容器上下文
            IApplicationContext ctx = ContextRegistry.GetContext();
            //第五步,通過容器創建對象
            IUserInfoDal efDal = ctx.GetObject("UserInfoDal") as IUserInfoDal;
            efDal.Show();

            IUserInfoDal adoDal = ctx.GetObject("UserInfoDal2") as IUserInfoDal;
            adoDal.Show();

            Console.ReadKey();
        }
    }
}
複製代碼

 

下面是MVC項目中使用Spring.Net融合的例子

1、將Spring.net程序集複製到項目下的packages文件夾中。

2、項目中添加引用Spring.Core.dll、Common.Logging.dll、Spring.Web.Mvc4.dll、Spring.Web.dll

3、修改Web.config,配置節點

複製代碼
<configuration>
  <configSections>
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
    
    <!-- Spring.Net配置節點 -->
    <sectionGroup name="spring">
      <section name="context" type="Spring.Context.Support.MvcContextHandler, Spring.Web.Mvc4"/>
    </sectionGroup>
  </configSections>
  <!-- Spring.Net節點詳細配置 -->
  <spring>
    <context>
      <resource uri="file://~/Config/controllers.xml"/>
    </context>
  </spring>

</configuration>
複製代碼

4、項目中創建Config文件夾,controllers.xml文件。

複製代碼
<?xml version="1.0" encoding="utf-8" ?>
<objects xmlns="http://www.springframework.net">

  <object type="HX.Shop.UI.Main.Controllers.AdminController, HX.Shop.UI.Main" singleton="false" >
    <property name="AdminService" ref="AdminService" />
  </object>
  <object name="AdminService" type="HX.Shop.BLL.AdminService, HX.Shop.BLL" singleton="false" >
    
  </object>
</objects>
複製代碼

 

5、Global.asax 中修改 SpringMvcApplication

public class MvcApplication : Spring.Web.Mvc.SpringMvcApplication //System.Web.HttpApplication





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章