首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> 關於ASP.NET

ASP.NET MVC Controller 激活系統詳解(上):IoC 核心概念與 Unity 實戰示範

     編輯:關於ASP.NET

控制反轉將依賴對象創建移交外部容器,實現鬆耦合。本文介紹 IoC 四大核心概念(型別匹配、建構子/屬性/方法注入),並以 Unity 容器完整示範四種注入方式的配置與程式碼驗證。

一、IoC 四大核心概念

  • 型別匹配:介面與實作類別的註冊映射
  • 建構子注入:容器智能選擇建構函數,自動解析參數依賴
  • 屬性注入:物件建立後自動初始化標記屬性([Dependency])
  • 方法注入:物件建立後自動調用標記方法([InjectionMethod])

二、Unity 完整示範程式碼

介面與實作:

public interface IA {} public interface IB {} public interface IC {} public interface ID {}

public class A : IA
{
    public IB B { get; set; }
    [Dependency] public IC C { get; set; }
    public ID D { get; set; }

    public A(IB b) { this.B = b; } // 建構子注入 B

    [InjectionMethod]
    public void Initialize(ID d) { this.D = d; } // 方法注入 D
}
public class B : IB {} public class C : IC {} public class D : ID {}

設定檔註冊型別映射:

<unity>
  <container name="defaultContainer">
    <register type="UnityDemo.IA, UnityDemo" mapTo="UnityDemo.A, UnityDemo"/>
    <register type="UnityDemo.IB, UnityDemo" mapTo="UnityDemo.B, UnityDemo"/>
    <register type="UnityDemo.IC, UnityDemo" mapTo="UnityDemo.C, UnityDemo"/>
    <register type="UnityDemo.ID, UnityDemo" mapTo="UnityDemo.D, UnityDemo"/>
  </container>
</unity>

解析驗證:

var container = new UnityContainer();
var config = ConfigurationManager.GetSection("unity") as UnityConfigurationSection;
config.Configure(container, "defaultContainer");

var a = container.Resolve<IA>() as A;
Console.WriteLine("a.B == null ? " + (a.B == null ? "Yes" : "No")); // No
Console.WriteLine("a.C == null ? " + (a.C == null ? "Yes" : "No")); // No
Console.WriteLine("a.D == null ? " + (a.D == null ? "Yes" : "No")); // No

輸出全為 No,證明四種注入均生效:IA→A(型別匹配)、IB→B(建構子)、IC→C(屬性)、ID→D(方法)。

三、Unity 關鍵特性對照表

| 特性 | 注入方式 | 適用場景 | |------|----------|----------| | 無(建構函數參數) | 建構子注入 | 強制依賴、不可變物件 | | [Dependency] | 屬性注入 | 可選依賴、循環依賴打破 | | [InjectionMethod] | 方法注入 | 複雜初始化邏輯、多參數注入 |

理解 IoC 核心機制是掌握 MVC ControllerActivator/DependencyResolver 整合的基礎。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved