iT邦幫忙

2024 iThome 鐵人賽

DAY 0
0
自我挑戰組

ASP.NET Core生成網站記錄系列 第 10

DAY11-DI和問題

  • 分享至 

  • xImage
  •  
  1. 全域 using 指令
    作用: 避免在每個類別中重複寫入命名空間,簡化程式碼。
    解釋:
    escale.Models:引用了 escale 這個專案中的 Models 資料夾,裡頭應該包含了一些資料模型類別。
    Dapper:一個輕量級的 ORM 工具,用於與資料庫互動。
    Microsoft.AspNetCore.:這些命名空間提供了 ASP.NET Core 的核心功能,包括授權、MVC、資料庫存取等等。
    System.
    :C# 的標準命名空間,提供了基礎的類別和功能。
  2. 建立 WebApplication
    作用: 創建一個 ASP.NET Core 應用程式的啟動類。
    解釋:
    WebApplication.CreateBuilder(args):創建一個 WebApplicationBuilder 實例,用於配置應用程式。

為什麼需要 WebApplication.CreateBuilder()?
WebApplication.CreateBuilder() 是 ASP.NET Core 應用程式啟動時的一個關鍵步驟,它扮演著一個「建築師」的角色,負責:

初始化應用程式: 為應用程式建立一個基礎的框架,包含了處理 HTTP 請求、配置服務、管理生命週期等基本功能。
配置服務: 允許開發人員在這裡註冊各種服務,例如依賴注入 (DI)、資料庫連線、中間件等等。這些服務將在應用程式運行時被使用。
設定配置: 可以從不同的來源(如 appsettings.json、環境變量)讀取配置信息,並將這些配置信息注入到應用程式中。
建立管道: 配置 HTTP 請求處理的管道,定義請求進入應用程式後,會經過哪些中間件進行處理。


  1. 添加服務
    作用: 將各種服務添加到服務容器中,以便在應用程式中使用。
    解釋:
    AddControllersWithViews():添加 MVC 控制器的支持,用於處理 HTTP 請求。
    AddSingleton():將 CssService 註冊為單例服務,即整個應用程式只有一個實例。
    AddDbContext():使用 Entity Framework Core 將 dbEntities 上下文註冊為服務,用於與資料庫互動。
    其他:添加 JSON 格式化、Razor Pages、授權、Swagger 等服務。
  2. 配置
    作用: 配置應用程式的各種設定,如 JSON 格式、環境變數、資料庫連線、路由、中間件等。
    解釋:
    JSON 格式化:配置 JSON 的序列化和反序列化行為,包括日期格式、屬性命名等。
    環境設定檔:從 appsettings.json 和環境變數中讀取配置信息。
    資料庫連線:配置與資料庫的連線字符串。
    OpenAPI:配置 Swagger UI,用於生成 API 文檔。
    JWT:配置 JWT 認證,用於保護 API。
    Session:配置 Session,用於在請求之間保存用戶狀態。
    路由:配置應用程式的路由規則,將 URL 對應到特定的控制器和動作。
  3. 建構應用程式
    作用: 將所有配置好的服務和中間件組裝成一個完整的應用程式。
    解釋:
    builder.Build():創建一個 WebApplication 實例,表示整個應用程式。
  4. 配置 HTTP 請求管道
    作用: 配置應用程式如何處理 HTTP 請求。
    解釋:
    UseExceptionHandler:配置異常處理。
    UseHttpsRedirection:強制使用 HTTPS。
    UseStaticFiles:提供靜態文件服務。
    UseRouting:啟用路由功能。
    UseSession:啟用 Session 功能。
    UseAuthorization:啟用授權功能。
    UseEndpoints:配置終結點,即處理 HTTP 請求的具體邏輯。

依賴性注入(Dependency Injection)
注入的途徑有以下三種:

建構式注入(Constructor Injection)
方法注入(Method Injection)
屬性注入(Property Injection)

  1. 建構子注入 (Constructor Injection)
    這是最常見且推薦的方式,將依賴物件直接在建構子中注入。

C#
public class MyClass
{
private readonly IMyInterface _myInterface;

public MyClass(IMyInterface myInterface)
{
    _myInterface = myInterface;
}

public   

void DoSomething()
{
_myInterface.SomeMethod();
}
}
請謹慎使用程式碼。

優點:
強制要求依賴物件,確保物件在初始化時就擁有所需的資源。
提高可讀性,一目了然哪些是物件的依賴。
缺點:
如果依賴太多,建構子參數可能會過長。
2. 屬性注入 (Property Injection)
通過屬性設置來注入依賴物件。

C#
public class MyClass
{
public IMyInterface MyInterface { get; set; }

public void DoSomething()
{
    MyInterface.SomeMethod();
}

}
請謹慎使用程式碼。

優點:
比建構子注入更靈活,可以在物件初始化後再注入依賴。
缺點:
容易忘記設置屬性,導致 NullReferenceException。
降低了物件的不可變性。
3. 方法注入 (Method Injection)
通過方法參數來注入依賴物件。

C#
public class MyClass
{
public void DoSomething(IMyInterface myInterface)
{
myInterface.SomeMethod();
}
}
請謹慎使用程式碼。

優點:
更靈活,可以在需要時才注入依賴。
缺點:
容易忘記傳入依賴物件,導致錯誤。
破壞了方法的單一職責原則。


上一篇
DAY10- WEB API
下一篇
DAY12-首頁優化
系列文
ASP.NET Core生成網站記錄31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言