顯示具有 DI 標籤的文章。 顯示所有文章
顯示具有 DI 標籤的文章。 顯示所有文章

2019年5月8日 星期三

ASP.NET Core 的內建 DI

以讀取預設的 appsetting.json 為例


{
  "Logging": {
    "LogLevel": {
      "Default": "Warning"
    }
  }
}



建立存放 appsetting.json 的類別 MySetting.cs


public class MySetting
{
    public Logging Logging { get; set; }
}

public class Logging
{
    public LogLevel LogLevel { get; set; }
}

public class LogLevel
{
    public string Default { get; set; }
}



在 Startup.cs 的 ConfigureServices 中註冊


public void ConfigureServices(IServiceCollection services)
{
    services.Configure<mysetting>(Configuration);

    services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
}



在 Controller 中使用 IOptions <mysetting>注入


public class HomeController : Controller
{
    private IOptions<mysetting> myOption;

    public HomeController(IOptions<mysetting> _option)
    {
        myOption = _option;
    }
}



2018年5月7日 星期一

DI—Dependency Injection 依賴注入 超超簡單說明

 一般是用來解決「耦合性(相依)過高」的問題
通常都會搭配介面 interface 進行注入
讓程式保留彈性
便於在新的需求發生時
能便於抽換
下面我舉個例子




    /// 
    /// Logger 的介面
    /// 
    public interface ILogger
    {
        void Print(string msg, Color color);
    }

    /// 
    /// 預設的 Console Logger
    /// 
    public class ConsoleLogger : ILogger
    {
        public void Print(string msg, Color color)
        {
            System.Console.WriteLine(msg);
        }
    }


這種繼承同一介面 interface 的手法,就叫做注入 這種手法可以簡單的利用繼承同一介面 實做自己須要的程式內容 一般都會透過 DI Container 集中註冊方式 統一管理所有DI元件 例如:Autofac 想瞭解 Autofac 可以到看看這個網頁:超簡單一分鐘學會 DI 框架 AutoFac

超簡單一分鐘學會 DI 框架 AutoFac

DI—Dependency Injection 依賴注入

安裝 AutoFac 的 NuGet 套件


static void Main(string[] args)
{
    // 註冊繼承 interface 的子類別
    var builder_ = new ContainerBuilder();
    builder_.RegisterType<Mylogger>().As<Ilogger>();
                         
    // 取得繼承 interface 的子類別
    var container_ = builder_.Build();
    var logger = container_.Resolve<Ilogger>();
}


整理一下,簡單的說:

1. ContainerBuilder.Register 註冊繼承 interface 的子類別
 2. Container.Resolve 取得繼承 interface 的子類別 

AutoFac 功能非常強大,上面程式碼只是入門

Visual Studio 2017/2019 推薦的擴充功能與更新

參考文章: 覺得 Google 的 Blogger 不太順手?透過 HTML 的 iframe 移花接木 HackMD