學習Spring.Net:1.簡單的應用之控制台


1.開始。

 

2.新建一個控制台,我們新建一個SpringNetTest類。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace SpringNetDemo
{
   public class SpringNetTest
    {
        public void SayHello()
        {
            Console.WriteLine("SayHello");
        }
    }
}

2.首先我們用正常的方式在mian函數入口實例化這個SpringNetTest對象

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace SpringNetDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            SpringNetTest springNet = new SpringNetTest();
            springNet.SayHello();
            Console.ReadKey();
        }
    }
}

4.很明顯這個地方是直接New的,進行了強耦合,在實際的項目中這樣寫,未來需求變動是不利於修改的。面向對象思想中,我們要面向接口編程。接下來我提取一個接口,SpringNetTest繼承這個接口。寫一個簡化版本的例子

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace SpringNetDemo
{
    interface IObjectNetTest
    {
        void SayHello();
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace SpringNetDemo
{
   public class SpringNetTest: IObjectNetTest
    {
        public void SayHello()
        {
            Console.WriteLine("SayHello");
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace SpringNetDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            IObjectNetTest springNet = new SpringNetTest();
            springNet.SayHello();
            Console.ReadKey();
        }
    }
}

這樣的話,我們程序只要是依賴於IObjectNetTest而不依賴 SpringNetTest了,以后如果 不用SpringNetTest,但是只要是繼承於IObjectNetTest對象都可以改。但是這個地方還是要修改 new SpringNetTest(),我們這個地方還是強耦合。那這個時候我們SpringNet就閃亮登場了。

5.首先我們下載好了SpringNet的程序集,這是全部的 控制台我們只要前面4個基礎的就好了

6.修改配置文件AppConfig,和main方法代碼,注入的方式好多種,我下面只列舉了一種,具體的可以看文檔

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  
  <!--Spring-->
  <configSections>
    <!--spring容器對象的創建-->
    <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>
    <!-- Spring.Net對象容器的配置 -->
    <context>
      <!--要注入容器的對象的創建路徑-->
      <resource uri ="config://spring/objects" />
      <!--<resource uri="file://~Config/common.xml" />-->
    </context>
    <objects  xmlns= "http://www.springframework.net" >
      <!--創建的對象-->
      <!--name:是定義啟的名字,type:逗號前面是創建對象的命名空間,逗號后面是創建對象所在的程序集-->
      <object  name = "IobjectNetTest" type="SpringNetDemo.SpringNetTest,SpringNetDemo">
      </object>
    </objects>
  </spring>
  <!--Spring-->
</configuration>
using Spring.Context;
using Spring.Context.Support;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace SpringNetDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            //普通做法
            //IObjectNetTest springNet = new SpringNetTest();

            //SpringNet做法
            IApplicationContext ctx = ContextRegistry.GetContext();

            IObjectNetTest NetTest =(IObjectNetTest)ctx.GetObject("IobjetNetTest");
            NetTest.SayHello();
            Console.ReadKey();
        }
    }
}

這樣的話,我們就完成解耦了。IobjectNetTest對象的就是通過Srping容器幫我們創建了。如果下次換成SummerNetTest,或者FallNetTest,或者WinterNetTest,不管你是春夏秋冬哪一個,只要繼承了IobjectNetTest,都可以在AppConfig配置里修改一下配置,就可以完美切換了。這地方有一個很很牛逼的思想,我也不是很懂的思想,DIP-依賴倒置原則,IOC-控制反轉,DI-依賴注入。 從上面的例子來說 IobjetNetTest我們從直接new 變成 交給了Spring容器,這個就是控制反轉。創建的權利交給了Spring這個容器。就是設計模式里抽象工廠概念。DI依賴注入就是我們通過在配置文件里配置好,Spring 容器才可以創建。概念比較高深,我也不是很懂,我找了好多的博客:

 這個大牛的博客就很贊。https://www.cnblogs.com/liuhaorain/p/3747470.html#title_2

以上內容都是本人學習鞏固之用。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM