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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Unity 配置:typeConverter的使用

發(fā)布時(shí)間:2025/3/15 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Unity 配置:typeConverter的使用 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
本文主要介紹自己在使用Unity時(shí)碰到的一個(gè)問(wèn)題,及解決方案。
由于本人不擅長(zhǎng)寫(xiě)作,所以文字都很簡(jiǎn)單,各位還是主要看代碼及DEMO吧。

首先先看一下以下代碼:

????public?interface?ILogger
????
{
????????
void?Write();
????}


????
public?class?FlatFileLogger?:?ILogger
????
{
????????
private?Message?_message;
????????
public?FlatFileLogger(Message?message)
????????
{
????????????_message?
=?message;
????????}


????????
public?void?Write()
????????
{
????????????Console.WriteLine(String.Format(
"Message:{0}",?_message));
????????????Console.WriteLine(
"Target:FlatFile");
????????}

????}


????
public?class?Message
????
{
????????
private?string?_message;
????????
private?Message(string?message)
????????
{
????????????_message?
=?message;
????????}


????????
public?override?string?ToString()
????????
{
????????????
return?_message.ToString();
????????}


????????
public?static?Message?CreateMessage(string?message)
????????
{
????????????
return?new?Message(message);
????????}

????}


????
class?Program
????
{
????????
static?void?Main(string[]?args)
????????
{
????????????IUnityContainer?container?
=?new?UnityContainer();
????????????UnityConfigurationSection?section?
=?(UnityConfigurationSection)ConfigurationManager.GetSection("unity");
????????????section.Containers[
"containerOne"].Configure(container);

????????????ILogger?log?
=?container.Resolve<ILogger>();
????????????log.Write();

????????????Console.ReadLine();
????????}

????}

配置文件:

<?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="string"?type="System.String,?mscorlib"?/>

????????????
<!--?Lifetime?manager?types?-->
????????????
<typeAlias?alias="singleton"
?????????????????type
="Microsoft.Practices.Unity.ContainerControlledLifetimeManager,
???????????????Microsoft.Practices.Unity"
?/>
????????????
<typeAlias?alias="external"
?????????????????type
="Microsoft.Practices.Unity.ExternallyControlledLifetimeManager,
???????????????Microsoft.Practices.Unity"
?/>

????????????
<!--?User-defined?type?aliases?-->
????????????
<typeAlias?alias="ILogger"?type="UnityDemo.ILogger,?UnityDemo"?/>
????????????
<typeAlias?alias="FlatFileLogger"?type="UnityDemo.FlatFileLogger,?UnityDemo"?/>
????????????
<typeAlias?alias="Message"?type="UnityDemo.Message,?UnityDemo"?/>
????????
</typeAliases>
????????
<containers>
????????????
<container?name="containerOne">
????????????????
<types>
?????????????????????
<type?type="ILogger"?mapTo="FlatFileLogger"/>
????????????????</types>
????????????
</container>
????????
</containers>
????
</unity>
</configuration>
一運(yùn)行程序就報(bào)錯(cuò),那是因?yàn)镸essage類的構(gòu)造函數(shù)是私有的,Unity無(wú)法自動(dòng)裝配。

本來(lái)父對(duì)象的構(gòu)造函數(shù)如果需要指定具體值,可以通過(guò)修改配置文件來(lái)達(dá)到目的,配置修改如下:

<type?type="ILogger"?mapTo="FlatFileLogger">
????????????????????????
<typeConfig?extensionType="Microsoft.Practices.Unity.Configuration.TypeInjectionElement,
?????????????????????????????????????Microsoft.Practices.Unity.Configuration"
>
????????????????????????????
<constructor>
????????????????????????????????
<param?name="message"?parameterType="Message">
????????????????????????????????????
<value?value="Some?Value"></value>
????????????????????????????????
</param>
????????????????????????????
</constructor>
????????????????????????
</typeConfig>
????????????????????
</type>
但現(xiàn)在還有一個(gè)問(wèn)題,就是由于參數(shù)message的類型是自定義類型,不是像string, int等系統(tǒng)類型, 按以上配置是無(wú)法把一個(gè)Message的實(shí)例傳給FlatFileLogger的構(gòu)造函數(shù)的。這時(shí)就需要用到typeConverter,把value中的值轉(zhuǎn)換成一個(gè)Message的實(shí)例。

LoggerConverter:

???public?class?LoggerConverter?:?TypeConverter
????
{
????????
public?override?bool?CanConvertFrom(ITypeDescriptorContext?context,?Type?sourceType)
????????
{
????????????
if?(sourceType?==?typeof(string))
????????????
{
????????????????
return?true;
????????????}

????????????
return?base.CanConvertFrom(context,?sourceType);
????????}


????????
public?override?object?ConvertFrom(ITypeDescriptorContext?context,
???????????CultureInfo?culture,?
object?value)
????????
{
????????????
if?(value?is?string)
????????????
{
????????????????
return?Message.CreateMessage(value.ToString());
????????????}

????????????
return?base.ConvertFrom(context,?culture,?value);
????????}

????}

?修改后最終的配置文件:

<?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="string"?type="System.String,?mscorlib"?/>

????????????
<!--?Lifetime?manager?types?-->
????????????
<typeAlias?alias="singleton"
?????????????????type
="Microsoft.Practices.Unity.ContainerControlledLifetimeManager,
???????????????Microsoft.Practices.Unity"
?/>
????????????
<typeAlias?alias="external"
?????????????????type
="Microsoft.Practices.Unity.ExternallyControlledLifetimeManager,
???????????????Microsoft.Practices.Unity"
?/>

????????????
<!--?User-defined?type?aliases?-->
????????????
<typeAlias?alias="ILogger"?type="UnityDemo.ILogger,?UnityDemo"?/>
????????????
<typeAlias?alias="FlatFileLogger"?type="UnityDemo.FlatFileLogger,?UnityDemo"?/>
????????????
<typeAlias?alias="LoggerConverter"?type="UnityDemo.LoggerConverter,?UnityDemo"?/>
????????????
<typeAlias?alias="Message"?type="UnityDemo.Message,?UnityDemo"?/>
????????
</typeAliases>
????????
<containers>
????????????
<container?name="containerOne">
????????????????
<types>
?????????????????????
<type?type="ILogger"?mapTo="FlatFileLogger"?name="FlatFileLogger"?/>
?????????????????????
<type?type="ILogger"?mapTo="DatabaseLogger"?name="DatabaseLogger"/>
?????????????????????
?????????????????????
<type?type="ILogger"?mapTo="FlatFileLogger">
????????????????????????
<typeConfig?extensionType="Microsoft.Practices.Unity.Configuration.TypeInjectionElement,
?????????????????????????????????????Microsoft.Practices.Unity.Configuration"
>
????????????????????????????
<constructor>
????????????????????????????????
<param?name="message"?parameterType="Message">
????????????????????????????????????
<value?value="FlatFileLogger"?type="Message"?typeConverter="LoggerConverter"></value>
????????????????????????????????
</param>
????????????????????????????
</constructor>
????????????????????????
</typeConfig>
????????????????????
</type>
????????????????????
????????????????
</types>
????????????
</container>
????????
</containers>
????
</unity>
</configuration>
經(jīng)過(guò)修改后,程序終于可以正常運(yùn)行了。
運(yùn)行結(jié)果:
?

本文代碼

轉(zhuǎn)載于:https://www.cnblogs.com/NickYao/archive/2008/05/04/1181804.html

總結(jié)

以上是生活随笔為你收集整理的Unity 配置:typeConverter的使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。