構造函數注入、屬性注入、方法調用注入均可能引發循環依賴。Unity 在解析時會陷入無限遞歸,最終導致棧溢出或死循環。最佳防禦:編碼階段通過設計規避,而非依賴容器檢測。
public class Class1 {
public Class1(Class2 test2) { } // 依賴 Class2
}
public class Class2 {
public Class2(Class1 test1) { } // 依賴 Class1
}
解析 Class1 → 需 Class2 → 需 Class1 → 無限遞歸。
public class Class1 {
public Class1(Class1 test1) { } // 參數為自身類型
}
直接導致無限自我構造。
public class Class1 {
[InjectionMethod]
public void Method1() { Method2(); }
[InjectionMethod]
public void Method2() { Method1(); }
}
容器調用 Method1 → 觸發 Method2 → 再觸發 Method1 → 死循環。
public class Class1 {
[Dependency]
public string Property1 { get { return Property2; } }
[Dependency]
public string Property2 { get { return Property1; } }
}
解析 Property1 → 讀取 Property2 → 讀取 Property1 → 無限遞歸。
IMediator 統一協調Lazy<T> 或工廠委託)Unity 不提供循環檢測機制,開發者需通過架構治理從源頭消除風險。