日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Unity 开发和配置

發布時間:2023/12/15 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Unity 开发和配置 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

概述

Unity是一個輕量級的可擴展的依賴注入容器,支持構造函數,屬性和方法調用注入。Unity可以處理那些從事基于組件的軟件工程的開發人員所面對的問題。構建一個成功應用程序的關鍵是實現非常松散的耦合設計。松散耦合的應用程序更靈活,更易于維護。這樣的程序也更容易在開發期間進行測試。你可以模擬對象,具有較強的具體依賴關系的墊片(輕量級模擬實現),如數據庫連接,網絡連接,ERP連接,和豐富的用戶界面組件。例如,處理客戶信息的對象可能依賴于其他對象訪問的數據存儲,驗證信息,并檢查該用戶是否被授權執行更新。依賴注入技術,可確保客戶類正確實例化和填充所有這些對象,尤其是在依賴可能是抽象的 。

Unity 配置文件的完整格式

<?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection,Microsoft.Practices.Unity.Configuration, Version=1.0.0.0,Culture=neutral, PublicKeyToken=31bf3856ad364e35" /> </configSections><unity> <typeAliases><typeAlias alias="singleton" type="Microsoft.Practices.Unity.ContainerControlledLifetimeManager,Microsoft.Practices.Unity" /><typeAlias alias="external" type="Microsoft.Practices.Unity.ExternallyControlledLifetimeManager, Microsoft.Practices.Unity" /><typeAlias alias="IMyInterface" type="MyApplication.MyTypes.MyInterface, MyApplication.MyTypes" /><typeAlias alias="MyRealObject" type="MyApplication.MyTypes.MyRealObject, MyApplication.MyTypes" /><typeAlias alias="IMyService" type="MyApplication.MyTypes.MyService, MyApplication.MyTypes" /><typeAlias alias="MyDataService" type="MyApplication.MyTypes.MyDataService, MyApplication.MyTypes" /><typeAlias alias="MyCustomLifetime" type="MyApplication.MyLifetimeManager, MyApplication.MyTypes" /> </typeAliases><containers><container name="containerOne"><types><type type="Custom.MyBaseClass" mapTo="Custom.MyConcreteClass" /><type type="IMyInterface" mapTo="MyRealObject" name="MyMapping" /><type type="Custom.MyBaseClass" mapTo="Custom.MyConcreteClass"><lifetime type="singleton" /> </type><type type="IMyInterface" mapTo="MyRealObject" name="RealObject"><lifetime type="external" /></type><type type="Custom.MyBaseClass" mapTo="Custom.MyConcreteClass"><lifetime value="sessionKey" type="MyApplication.MyTypes.MyLifetimeManager,MyApplication.MyTypes" /></type><type type="IMyInterface" mapTo="MyRealObject" name="CustomSession"><lifetime type="MyCustomLifetime" value="ReverseKey" typeConverter="MyApplication.MyTypes.MyTypeConverter,MyApplication.MyTypes" /></type><type type="IMyService" mapTo="MyDataService" name="DataService"><typeConfig extensionType="Microsoft.Practices.Unity.Configuration.TypeInjectionElement, Microsoft.Practices.Unity.Configuration"><constructor><param name="connectionString" parameterType="string"><value value="AdventureWorks"/></param><param name="logger" parameterType="ILogger"><dependency /></param> (車延祿)</constructor> <property name="Logger" propertyType="ILogger" /><method name="Initialize"><param name="connectionString" parameterType="string"><value value="contoso"/></param><param name="dataService" parameterType="IMyService"><dependency /></param></method></typeConfig></type></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><extensionConfig><add name="MyExtensionConfigHandler" type="MyApp.MyExtensions.SpecialOne.ConfigHandler" /></extensionConfig></container> </containers> </unity> </configuration>

?

?

unity的設計圖

?

?

?

Unity的配置節的名稱為”Unity",節處理程序的類型為 Microsoft.Practices.Unity.Configuration.UnityConfigurationSection,它包含在程序集 Microsoft.Practices.Unity.Configuration 中。所在應當在網站是添加該程序集的引用。

unity 的子元素包含了一個 containers 元素,containers 元素可以包含若干個 container 元素。container 元素就是每個容器的配置,它有一個可選的 name 屬性,用于指定容器的名稱。

<types> 元素是 container 元素的子元素之一。包含任意數量的 type元素,用以添加類型注冊,這些配置被container.RegisterType<TFrom,TTo>()注冊;
type元素的屬性。
name:在注冊此類型時使用的名稱。此屬性是可選的,如果不指定此屬性,所在的 add 元素即為默認的類型映射。
type:容器中配置的源類型。如果這是映射注冊,這就是映射的起始對象的類型;如果這是單件注冊,這就是對象的類型。此屬性是必須的。
mapTo:類型映射的目標類型。如果這是映射注冊,這就是映射的目標對象的類型。此屬性是可選的。
lifetime:設置用于給定的類型和名稱的生命周期。是一個來自 LifetimeStyle 枚舉的值。有效的值是 Transient(默認),它導致了容器每次都創建一個新的實例;以及 Singleton,它使容器為每個請求返回同一實例。如果在配置一個單件時同時指定了 type 和 mapto 屬性,SetSingleton 方法將返回指定在 mapTo 屬性中的類型。如果 mapTo 屬性沒有指定值,SetSingleton 方法將返回指定在 type 屬性中的類型。

<instances> 元素保持了用于此容器的已有對象實例的列表。這些對象被用容器的 RegisterInstance 方法進行注冊。instances 元素包含了一系列添加單個實例的 add 元素。
add 元素的屬性。
name:注冊此實例時使用的名稱。此屬性是可選的。
type:此實例的類型。此屬性是可選的。如果忽略,假定的類型是 System.String。
value:用于初始化實例的值。此屬性是必須的。
typeConverter:用以轉換提供的值到實例的匹配類型的類型轉換器。如果沒有指定,將使用指定類型的默認轉換器。此屬性是可選的。

<typeConfig extensionType="Microsoft.Practices.Unity.Configuration.TypeInjectionElement,Microsoft.Practices.Unity.Configuration">
用來配置在類型注冊時,構造函數依賴注入,屬性依賴注入和方法依賴注入時的對象初始化信息。
它包含以下幾個子元素:

<constructor><param name="connectionString" parameterType="string"><value value="AdventureWorks"/></param><param name="logger" parameterType="ILogger"><dependency /></param> </constructor> <property name="Logger" propertyType="ILogger" /> <method name="Initialize"><param name="connectionString" parameterType="string"><value value="contoso"/></param><param name="dataService" parameterType="IMyService"><dependency /></param> </method>

?

?

?

在執行Container.Resolve()生成對象實例的時候,會根據上面的配置信息的內容對要生成的對象進行依賴注入。

二、加載配置信息到容器中
1、加載一個單獨的未命名容器或規定了默認容器:
IUnityContainer container = new UnityContainer();
UnityConfigurationSection section = (UnityConfigurationSection)ConfigurationManager.GetSection("unity");
section.Containers.Default.Configure(container);
這樣就會根據配置文件中的配置信息,在UnityContainer容器中注冊類型映射

2、加載一個特殊命名容器的配置信息,需要使用定義在配置文件中的容器名,而不是引用默認容器。例如,如果在配置中有一個命名為containerOne的容器,能使用如下代碼初始化并加載它:
IUnityContainer container = new UnityContainer();
UnityConfigurationSection section = (UnityConfigurationSection)ConfigurationManager.GetSection("unity");
section.Containers["containerOne"].Configure(container);

3、為了從配置信息中創建一個嵌套容器繼承, 可以簡單的使用CreateChildContainer方法在你需要的繼承深度中創建容器對象,然后通過讀取各自的配置文件加載合適的配置。下面的代碼展示了如何從配置文件中實例化和加載兩個容器,這個配置文件同時包含了針對兩個命名為containerOne和newstedChildContainer容器的注冊信息,類型映射和擴展定義。
IUnityContainer parentContainer = new UnityContainer();
IUnityContainer childContainer = parentContainer.CreateChildContainer();
UnityConfigurationSection section = (UnityConfigurationSection)ConfigurationManager.GetSection("unity");
section.Containers["containerOne"].GetConfigCommand().Configure(parentContainer);
section.Containers["nestedChildContainer"].Configure(childContainer);

?

?

API

UnityContainer.RegisterType<ITFrom,TTO>();

UnityContainer.RegisterType< ITFrom, TTO >();

UnityContainer.RegisterType< ITFrom, TTO >("keyName");

IEnumerable<T> databases = UnityContainer.ResolveAll<T>();

IT instance = UnityContainer.Resolve<IT>();

T instance = UnityContainer.Resolve<T>("keyName");

UnitContainer.RegisterInstance<T>("keyName",new T());

UnityContainer.BuildUp(existingInstance);

IUnityContainer childContainer1 = parentContainer.CreateChildContainer();

示例

public abstract class SQLHelp{public abstract string SqlConnection();}public class MySqlHelp:SQLHelp{public override string SqlConnection(){return "my sql connection";}}public class MSSqlHelp : SQLHelp{public override string SqlConnection(){return "ms sql connection";}}public class OracleSqlHelp : SQLHelp{public override string SqlConnection(){return "oracle sql connection";}}

?

?

?

app.config配置

<?xml version="1.0" encoding="utf-8" ?> <configuration><configSections><section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection,Microsoft.Practices.Unity.Configuration"/></configSections><unity xmlns="http://schemas.microsoft.com/practices/2010/unity"><container><register type="SqlHelp, New_Code" mapTo="MySqlHelp, New_Code"><lifetime type="singleton"/></register></container></unity> </configuration>

?

?

實現代碼

public void Main(){IUnityContainer container = new UnityContainer();UnityConfigurationSection section = (UnityConfigurationSection)ConfigurationManager.GetSection("unity");section.Containers.Default.Configure(container);SQLHelp sqlHelp = container.Resolve<SQLHelp>();Console.WriteLine(sqlHelp.SqlConnection());}

?

?

運行結果:

my sql connection

?

歡迎各位參與討論,如果覺得對你有幫助,請點擊??? 推薦下,萬分謝謝.

作者:spring yang

出處:http://www.cnblogs.com/springyangwc/

本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。

轉載于:https://www.cnblogs.com/springyangwc/archive/2012/05/17/2506595.html

總結

以上是生活随笔為你收集整理的Unity 开发和配置的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 97人人爽人人 | 亚洲97色 | 亚洲欧洲精品一区二区 | a资源在线 | 女女互磨互喷水高潮les呻吟 | 波多野结衣日韩 | 国产视频三区 | 欧美久久久久久久久久 | 色偷偷av一区二区三区 | 青青草中文字幕 | 国产精品亚洲综合 | 欧美综合一区 | 影音先锋中文字幕一区二区 | 黄色.com| 天天色播| 亚洲AV成人无码精品久久盆瓶 | 丝袜熟女一区二区三区 | av资源网址 | 日本黄色录相 | 亚洲天堂2018av | 久久大尺度 | 男女午夜激情 | 婷婷激情小说 | 岛国一区 | 亚洲熟女少妇一区二区 | 中国av一区 | 欧美在线v| 欧美视频在线不卡 | 91精品国产91久久久久福利 | 中文字幕一区二区三区手机版 | 国产伦一区二区三区 | 美女久久久久久久久久 | 韩国裸体网站 | 一区两区小视频 | 国产成人在线观看免费 | 国产精品人人做人人爽人人添 | 奇米影视亚洲春色 | 美女天天干 | 亚洲无人区码一码二码三码 | 国产视频一区二区三区在线播放 | 风间由美av | 涩涩爱影院| 欧美成人a视频 | free欧美性69护士呻吟 | 亚洲а∨天堂久久精品2021 | 日本免费一二三区 | 精品视频一区二区在线观看 | 91网址在线播放 | 污污视频网站在线免费观看 | 日本中出视频 | 91麻豆成人| 亚洲欲妇 | 97在线精品| 国产精品野外户外 | 亚洲美免无码中文字幕在线 | 丰满少妇高潮一区二区 | 一区二区三区欧美视频 | 日本一区二区三区免费电影 | 色眯眯视频 | 深夜视频在线播放 | 中国大陆高清aⅴ毛片 | 精品人人妻人人澡人人爽牛牛 | 女大学生的家政保姆初体验 | 成人黄色免费网址 | 69视频网| 免费麻豆视频 | 日韩欧美日韩 | 国产美女又黄又爽又色视频免费 | 久久成人亚洲 | 久久96视频 | 日本xxxx高清| 欧美亚洲在线视频 | 免费人成年激情视频在线观看 | 日本亚洲网站 | 久久免费看少妇高潮 | 美女扒开大腿让男人桶 | 日本熟妇一区二区三区四区 | 国产伦精品一区二区三区妓女下载 | 蜜桃传媒 | 特级精品毛片免费观看 | 欧美一区二区三区系列电影 | 亚洲激情a| 黑人巨大精品人妻一区二区 | 91黄版| 超碰福利在线观看 | 综合网色| 午夜一级视频 | 天天摸天天舔天天操 | 色偷偷成人 | 99热热久久 | 欧美日韩高清一区 | 国产主播在线看 | 国产精品天美传媒 | 蜜桃久久久aaaa成人网一区 | 最新激情网站 | 亚洲成人麻豆 | 国产熟妇搡bbbb搡bbbb搡 | 午夜激情黄色 | 午夜一区二区三区免费观看 |