Castle IOC 提倡自動裝配,由容器自動管理組件依賴,無需在 XML 中手工配置依賴關係。Spring.NET 雖支援自動裝配,但官方不推薦,堅持「一切皆 XML 配置」,這是兩者最大分歧。
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<object id="myManComponent" class="CastleDemo.MyMainComponent, CastleDemo">
<constructor-arg><ref object="mycomponent1" /></constructor-arg>
<constructor-arg><ref object="mycomponent2" /></constructor-arg>
<constructor-arg><value>1</value></constructor-arg>
</object>
<object id="mycomponent1" class="CastleDemo.MyComponent1, CastleDemo" />
<object id="mycomponent2" class="CastleDemo.MyComponent2, CastleDemo" />
</configuration>
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<components>
<component id="myMainComponent">
<parameters><i>1</i></parameters>
</component>
</components>
</configuration>
public class App {
public static void Main() {
IWindsorContainer container = new WindsorContainer(new XmlInterpreter("../../BasicUsage.xml"));
container.AddComponent("myMainComponent", typeof(MyMainComponent));
container.AddComponent("myComponent1", typeof(MyComponent1));
container.AddComponent("myComponent2", typeof(MyComponent2));
}
}
WindsorContainer 會自動調用 ConstructorDependenciesModelInspector 處理建構函數依賴。
新增依賴或組件時,Castle 只需註冊新組件,Spring.NET 需修改多處 XML。Castle 透過自動裝配消除手工配置依賴關係的負擔,配置檔更簡潔,且不區分建構函數/屬性注入,統一使用 Parameters 元素。