Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C#

วิธีการ Inject Dependency เข้าสู่ Controller ใน C# ASP.NET Core

ASP.NET Core ฉีดวัตถุของคลาส Dependency ผ่าน Constructor หรือ Method โดยใช้คอนเทนเนอร์ IoC มาตรฐาน คอนเทนเนอร์ที่สร้างมานี้แสดงผ่านการ implement ของ IServiceProvider ซึ่งรองรับ Constructor Injection โดยค่าเริ่มต้น ประเภท (คลาส) ที่ถูกจัดการโดยคอนเทนเนอร์ IoC มาตรฐานเรียกว่า Services

เพื่อให้คอนเทนเนอร์ IoC สามารถฉีดบริการของแอปพลิเคชันได้โดยอัตโนมัติ เราต้องลงทะเบียนบริการเหล่านั้นกับคอนเทนเนอร์ IoC ก่อน

ตัวอย่างการลงทะเบียนและ Inject บริการ

public interface ILog { void Info(string str); }
class MyConsoleLogger : ILog {
    public void Info(string str) {
        Console.WriteLine(str);
    }
}

ASP.NET Core อนุญาตให้เราลงทะเบียนบริการของแอปพลิเคชันกับคอนเทนเนอร์ IoC ในเมธอด ConfigureServices ของคลาส Startup เมธอด ConfigureServices มีพารามิเตอร์ประเภท IServiceCollection ซึ่งใช้สำหรับลงทะเบียนบริการของแอปพลิเคชัน

public class Startup {
    public void ConfigureServices(IServiceCollection services) {
        services.AddSingleton<ILog, MyConsoleLogger>();
    }
}

เมธอด Add() ของอินสแตนซ์ IServiceCollection ใช้สำหรับลงทะเบียนบริการกับคอนเทนเนอร์ IoC เราได้ระบุ ILog เป็นประเภทบริการ และ MyConsoleLogger เป็นอินสแตนซ์ของมัน ซึ่งจะลงทะเบียนบริการ ILog เป็น Singleton ตอนนี้ คอนเทนเนอร์ IoC จะสร้างออบเจกต์ Singleton ของคลาส MyConsoleLogger และฉีดเข้าไปใน Constructor ของคลาสต่างๆ ที่มี ILog เป็นพารามิเตอร์ Constructor หรือ Method ตลอดแอปพลิเคชัน

ตัวอย่างการใช้งานใน Controller

public class HomeController : Controller {
    private readonly ILog _logger;
    
    // Constructor Injection
    public HomeController(ILog logger) {
        _logger = logger;
    }
    
    public IActionResult Index() {
        _logger.Info("Home page accessed");
        return View();
    }
}