markdown
### 前言
在 ASP.NET Core 的環境, 預設早已支援 Dependency Injection (依賴注入) 的設計模式, 但在 ASP.NET MVC 5 以前的專案沒有這樣的功能, 本篇簡單介紹如何使用 Unity.Mvc 套件來達成依賴注入。
### 環境
- Visual Studio 2019 16.3.9
- ASP.NET MVC 5
- .NET Framework 4.7.2
- NuGet 套件: [Unity.Mvc](https://github.com/unitycontainer/aspnet-mvc) 5.11.1 (Author: Unity Open Source Project)
### 在專案中加入 Unity.Mvc
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-ZABFitYSnm8H_rf5YnFfmzV-Ju32mIvaCI5lGncfK8M1LLCqyXYQWAFzhhXJxzaiOzELt4vQ6fmOAvJgkE69G_eLuq7isqn-cIZbBKUTWG2lmGsQQlFIPMws3wrm3bAPRCMXbw/s1600/img_20191119003.png)
安裝套件完成後,會自動在 App_Start 加入 2 個檔案: `UnityConfig.cs` 及 `UnityMvcActivator.cs`
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjeHFxtI_VnL_SIXKhC8hbHTL7fFW5rZSQ2qpjusrPHVw72qrtU2egd2vmKDgRfEGX4RPs_Jo9Fqo-bNW1MTiOkwQYJC5JKU80j7xZRTHemZnyW-SS7P776863i54b-5Io49b2o3w/s1600/img_20191119004.png)
基本上所有的啟動功能它都做完了, 我們只要針對 `UnityConfig.cs` 這個檔案加入我們的註冊的類型即可
例如:
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDfag1PP-btNz2YLd4IMxU-KuOUXmmK353-6QoEfIOEhVSoEBJxJuYmVvWvEOed461ePUUkNdBs_yQb2UST6ciXYKZ-xuuIUBuVG5XPUFfdEcHuHY3kz9XxM3z1F-FSapUWuj4mA/s1600/img_20191119006.png)
如果有忘記註冊的類型, 卻被使用到了, 即會出現以下的錯誤訊息
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEio9nkscCqNf66PqcJSbymxHnm5RYYpNuko15Kzk0jwqL4BsmMu_Zm2ITpTI6Y7r75szWziy7WVd2_VRGedJo2PEndJLEcGPg7Z0Y6-A5IktvQrKpmmP6XZ7rCqujLkB4pj79CuqA/s1600/img_20191118007.png)
### 程式用法
在 constructor 使用 interface 即會自動注入對應的實體
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPjp8ie8wmo6CFFUE7dSvUq6cBesxLb3wV3aS-RylTPYA74S7Ue8bqBSnNJsf3mqOXO9_B4LzSM9-penj624Ig7VzBgYJYfCGtgF0lJ-Ke2Y1BqP47lVW5EncJHR-i75E02eVoIw/s1600/img_20191119007.png)
是不是很方便呢? 前人種樹, 後人乘涼, 現在只要專注去做自己該對應的相關程式, 多餘的設定全都被妥當安排了。
不知道是不是因為它太簡單使用了, 所以專案連 README 文件都沒寫 XD。
所以寫一篇用法以備不時之需, 個人覺得這是目前用過最簡易使用的套件了, 因為幾乎無痛使用啊!!
範例程式: [UnityMvcDemo1](https://github.com/onecentlin/UnityMvcDemo1)
### 相關連結
- [Unity.Mvc](https://github.com/unitycontainer/aspnet-mvc)