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

AgileEAS.NET 平台:輕量級 IOC 容器與控制反轉實戰

     編輯:關於.NET

前言

控制反轉(IOC)與依賴注入(DI)是解決物件耦合的核心模式。AgileEAS.NET 框架早期採用抽象工廠模式,後引入輕量級 IOC 容器,支援建構子注入、屬性注入與多種生命週期管理。本文透過多資料庫切換實例,展示其配置與使用方式。

一、 應用場景:多資料庫 DAL 切換

專案需同時支援 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();
}

兩個實作專案分別實作此介面,回傳對應資料庫的具體類別。

二、 IOC 容器配置與解耦

在介面專案中建立 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:

  • Singleton:全域共享單一實例。
  • Thread:每執行緒獨立實例。
  • Transient:每次請求建立新實例,用後即棄。
  • Pooled:物件池模式,初始化預建實例,借用歸還。
  • Undefined:預設為 Transient。

五、 核心介面:IContainer 與 IContext

框架提供兩大核心介面:

  • IContainer:元件註冊、解析、移除、生命週期管理,支援依 Key、Type、Instance 多種方式操作。
  • IContext:執行時期上下文,提供容器存取、單例判斷、元件配置與查詢功能。

兩者協作構成完整的 IOC 執行環境,支援配置檔與程式碼雙重配置方式。

結語

AgileEAS.NET 的 IOC 容器雖屬輕量級,但涵蓋建構子/屬性注入、多生命週期、配置驅動等核心功能,足以支撐企業級應用的鬆耦合架構。實務上,配合介面導向設計與配置外部化,可實現資料存取、遠端服務等基礎設施的無縫切換。

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