Unity 配置:typeConverter的使用
2010-05-28 16:46
295 查看
本文主要介绍自己在使用Unity时碰到的一个问题,及解决方案。
由于本人不擅长写作,所以文字都很简单,各位还是主要看代码及DEMO吧。
首先先看一下以下代码:
一运行程序就报错,那是因为Message类的构造函数是私有的,Unity无法自动装配。
本来父对象的构造函数如果需要指定具体值,可以通过修改配置文件来达到目的,配置修改如下:
但现在还有一个问题,就是由于参数message的类型是自定义类型,不是像string, int等系统类型, 按以上配置是无法把一个Message的实例传给FlatFileLogger的构造函数的。这时就需要用到typeConverter,把value中 的值转换成一个Message的实例。
LoggerConverter:
经过修改后,程序终于可以正常运行了。
运行结果:
本文 代码
由于本人不擅长写作,所以文字都很简单,各位还是主要看代码及DEMO吧。
首先先看一下以下代码:
public interface ILogger public class FlatFileLogger : ILogger public class Message class Program <?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>
一运行程序就报错,那是因为Message类的构造函数是私有的,Unity无法自动装配。
本来父对象的构造函数如果需要指定具体值,可以通过修改配置文件来达到目的,配置修改如下:
<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>
但现在还有一个问题,就是由于参数message的类型是自定义类型,不是像string, int等系统类型, 按以上配置是无法把一个Message的实例传给FlatFileLogger的构造函数的。这时就需要用到typeConverter,把value中 的值转换成一个Message的实例。
LoggerConverter:
public class LoggerConverter : TypeConverter <?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>
经过修改后,程序终于可以正常运行了。
运行结果:
本文 代码
相关文章推荐
- Unity 配置:typeConverter的使用
- Microsoft.Practices.Unity使用配置文件总是报错The type name or alias could not be resolved.
- StrutsTypeConverter的使用
- Enterprise Library 5.0中使用Xml文件配置Unity2.0与ServiceLocator
- ubuntu16.04下使用matplotlib出现`TypeError: Couldn't find foreign struct converter for 'cairo.Context'`解决
- Unity使用ini配置文件
- Unity 使用教程 之 Win 配置Android环境,打包发布Apk流程详解
- miktex2.7中配置pdflatex使用truetype和type1字体(UTF8编码)
- 在unity使用ScriptableObject制作配置文件
- ClearType Tuner - XP使用光滑字体后别忘了进行手动配置!
- Unity 学习笔记(2) -- 配置文件的使用
- Unity的外部配置文件使用方法
- spring 容器中TypeConverter对象的使用
- Unity使用案例(文件配置)
- Unity使用案例(文件配置)
- 使用微软企业库5.0提供的unity配置解藕系统demo(源码)
- Unity Application Block 学习笔记之一使用配置文件
- Unity使用独立配置文件的方法
- Unity&Webform(2):自定义LifetimeManager和TypeConverter使Unity从HttpContext中取值注入WebForm页面
- StrutsTypeConverter的使用