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

来源:http://www.cnblogs.com/DingKing/archive/2017/12/18/8056427.html
-Advertisement-
Play Games

1.開始。 2.新建一個控制台,我們新建一個SpringNetTest類。 2.首先我們用正常的方式在mian函數入口實例化這個SpringNetTest對象 4.很明顯這個地方是直接New的,進行了強耦合,在實際的項目中這樣寫,未來需求變動是不利於修改的。面向對象思想中,我們要面向介面編程。接下來 ...


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

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


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 最近做的項目,上線後一切正常,過段時間管理員反饋用戶導出EXCEL報錯,前臺獲取用戶列表不顯示,查找問題找到是微信昵稱、emoji表情導致報錯, emoji表情介紹 由於微信介面中對於emoji表情使用的是UTF-8的二進位字元串,並沒有解碼,表現就是當收到微信端用戶發來的emoji表情時,顯示為一 ...
  • 類只能繼承一個類,不能繼承多個類,但可以繼承多個介面Interface。 類是對象的抽象,抽象類是類的抽象,而介面是行為的抽象。 下麵Insus.NET創建2個介面: 介面是統一行為,抽象是從現在有代碼中,把上同代碼抽取出來的一個抽象方法,而介面卻是相反。不清楚有什麼子類存在,行為具體實現也不確定。 ...
  • 通過前面的文章,已經學習了怎麼使用線程,怎麼使用線程同步,怎麼使用線程池,怎麼使用任務並行庫。儘管通過上面的學習,對於線程的使用越來越簡單。有沒有更簡單的方法呢。 C# 5.0之後,微軟在c#語言中添加了兩個關鍵字async與await,這是在TPL上面的更高一級的抽象,真正簡化了異... ...
  • 抽象類,有3個特點: 第1個,不能被實例化。 第2個,類中的抽象方法在繼承的子類中必須重寫。 第3個,類一旦有抽象方法出現,那這個類必須定義為抽象類。 現實開發中,發現有共同的代碼,可以把這些共同的代碼放在一個抽象類中。舉個例子,計算四邊形的周長。 矩形,長方形,正方形: class Rectang ...
  • 隨著軟體的不斷發展,出現了更多的身份驗證使用場景,除了典型的伺服器與客戶端之間的身份驗證外還有,如服務與服務之間的(如微服務架構)、伺服器與多種客戶端的(如PC、移動、Web等),甚至還有需要以服務的形式開放給第三方的,身份驗證這一功能已經演化為一個服務,很多大型應用中都有自己的身份驗證伺服器甚至集 ...
  • 吐槽一下,博客園久了沒有上,賬號沒了,重新申請一個. cesharp v62版本,內核採用最新的Cef 62,支持最新的Grid佈局. 由於官方的cefsharp 採用.net4.5.2開發.怎麼辦怎麼辦.我只能用.net4.0.沒辦法啊,自己拿源碼修改相容唄. 仔細分析源碼發現: 1.net4.5 ...
  • 效果圖 相關知識 這部分基本就是廢話,網上都能找到,我只不過是整理了以下.建議先不看,用到的時候可以回來看看 先來看兩組圖,有助於理解什麼是貝塞爾曲線(圖片取自維基百科,參考鏈接1) 二次貝塞爾曲線: P0是起點,P2是終點,P1是控制點 三次貝塞爾曲線: P0是起點,P2是終點,P1是控制點1,P ...
  • public interface ICycle:IEnumerable { T Get(); } public class Cycle:ICycle { private class Node { public Node(F f) { Data=f; } p... ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...