控制反轉(IOC)與依賴注入(DI)是解決物件耦合的核心模式。AgileEAS.NET 框架早期採用抽象工廠模式,後引入輕量級 IOC 容器,支援建構子注入、屬性注入與多種生命週期管理。本文透過多資料庫切換實例,展示其配置與使用方式。
專案需同時支援 Oracle 與 SQL Server。採用介面驅動設計,劃分三個專案:
Exam.DAL.Interface:定義業務介面 IDALManager 及實體介面。Exam.DAL.SQLServer:SQL Server 具體實作。Exam.DAL.Oracle:Oracle 具體實作。IDALManager 定義工廠方法建立各業務物件:
public interface IDALManager
{
IIteminfo CreateIteminfo();
IIteminfoList CreateIteminfoList();
IProduct CreateProduct();
IProductList CreateProductList();
}
兩個實作專案分別實作此介面,回傳對應資料庫的具體類別。
在介面專案中建立 DALHelper 靜態類別,透過容器解析具體實作:
public class DALHelper
{
public static IDALManager DALManager
{
get
{
return ContextHelper.GetContext().Container.GetComponentInstance("EAS.Exam.DAL") as IDALManager;
}
}
}
系統配置檔中註冊元件,指定組件名稱、類型與生活型態:
<object name="EAS.Exam.DAL" assembly="EAS.Exam.DAL.SQLServer" type="EAS.Exam.DAL.SQLServer.DALManager" LifestyleType="Singleton" />
若需切換至 Oracle,僅需修改配置檔的 assembly 與 type 屬性,程式碼零修改。
容器支援豐富的注入配置,範例展示資料庫連線、ORM 存取器、快取、遠端服務等元件的串聯:
<object name="MasterDbConnection" assembly="EAS.Data" type="EAS.Data.Access.OleDbConnection" LifestyleType="Singleton">
<property name="ConnectionString" type="string" value="Provider=SQLOLEDB.1;..." />
</object>
<object name="OrmAccessor" assembly="EAS.Data" type="EAS.Data.ORM.OrmAccessor" LifestyleType="Singleton">
<property name="DbConnection" type="object" value="MasterDbConnection" />
</object>
<object name="MasterRMIAccessor" assembly="EAS.Distributed.WebServiceClient" type="EAS.Distributed.WebServiceClient.RMIAccessor" LifestyleType="Singleton">
<constructor-arg index="0" type="string" value="https://demo.smarteas.net/..." />
</object>
容器定義五種 LifestyleType:
框架提供兩大核心介面:
兩者協作構成完整的 IOC 執行環境,支援配置檔與程式碼雙重配置方式。
AgileEAS.NET 的 IOC 容器雖屬輕量級,但涵蓋建構子/屬性注入、多生命週期、配置驅動等核心功能,足以支撐企業級應用的鬆耦合架構。實務上,配合介面導向設計與配置外部化,可實現資料存取、遠端服務等基礎設施的無縫切換。