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

Unity 組態配置完整教學:XML 設定、容器初始化與物件解析實戰

     編輯:關於.NET

Unity 組態檔案架構

Unity 應用程式區塊支援從 XML 配置檔讀取設定,適用於 App.config (Windows Forms) 或 Web.config (ASP.NET)。標準配置結構如下:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Microsoft.Practices.Unity.Configuration" />
  </configSections>
  <unity>
    <containers>
      <container name="containerOne">
        <types>
          <type type="System.Data.IDbConnection,System.Data" mapTo="MyDefaultConnection,MyAssembly" />
          <type name="baseMap" type="System.Data.Common.DbConnection,System.Data" mapTo="MyDbConnection,MyAssembly" lifetime="Transient" />
          <type name="interfaceSingleton" type="System.Data.IDbConnection,System.Data" mapTo="MyDbConnection,MyAssembly" lifetime="Singleton"/>
        </types>
        <instances>
          <add name="MyInstance1" type="System.String" value="Some value" />
          <add name="MyInstance2" type="System.DateTime" value="2008-02-05T17:50:00" />
        </instances>
        <extensions>
          <!-- <add type="MyApp.MyExtensions.SpecialOne" /> -->
        </extensions>
      </container>
    </containers>
  </unity>
</configuration>

核心配置元素解析

配置區段

區段名稱為 unity,處理器型別為 Microsoft.Practices.Unity.Configuration.UnityConfigurationSection。

容器元素

containers 包含多個 container,每個可選擇性命名。容器不可巢狀定義。

類型映射

types 元素包含多個 type 註冊:

  • type:來源類型(必填),映射起點或單例類型
  • mapTo:目標類型(選填),映射終點
  • name:註冊名稱(選填),未指定則為預設映射
  • lifetime:生命週期,Transient (預設,每次新建) 或 Singleton (共享實例)

實例註冊

instances 區段對應 RegisterInstance,支援基本型別(字串、日期等),屬性包含 name、type、value、typeConverter。

擴充功能

extensions 允許加入自訂容器擴充。

程式碼讀取與容器初始化

private static IUnityContainer CreateContainer() {
    IUnityContainer container = new UnityContainer();
    UnityConfigurationSection section = (UnityConfigurationSection)ConfigurationManager.GetSection("unity");
    section.Containers["containerOne"].GetConfigCommand().Configure(container);
    return container;
}

若使用預設容器(無名稱):

section.Containers.Default.GetConfigCommand().Configure(container);

巢狀容器支援

雖配置檔不支援巢狀定義,但程式碼可建立父子容器:

IUnityContainer parentContainer = new UnityContainer();
IUnityContainer childContainer = parentContainer.CreateChildContainer();
section.Containers["containerOne"].GetConfigCommand().Configure(parentContainer);
section.Containers["nestedChildContainer"].GetConfigCommand().Configure(childContainer);

實戰解析範例

預設映射解析

IDbConnection connection = container.Get<IDbConnection>();
connection.Open(); connection.Close();

依鍵與名稱解析

DbConnection connection = container.Get<DbConnection>("baseMap");

單例驗證

IDbConnection conn1 = container.Get<IDbConnection>("interfaceSingleton");
conn1.ConnectionString = "server=10.99.123.22,...";
IDbConnection conn2 = container.Get<IDbConnection>("interfaceSingleton");
conn2.ConnectionString = "server=192.168.0.2...";
Console.WriteLine(conn1.ConnectionString); // 輸出第二個設定值,證明為同一實例

實例解析

string val1 = container.Get<string>("MyInstance1");
DateTime val2 = container.Get<DateTime>("MyInstance2");

結語

Unity 的配置系統提供強大的聲明式依賴管理,結合程式碼初始化與巢狀容器,能滿足從簡單到複雜企業級應用的各種場景需求。

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