本文主要介绍自己在使用Unity时碰到的一个问题,及解决方案。
由于本人不擅长写作,所以文字都很简单,各位还是主要看代码及DEMO吧。

首先先看一下以下代码:

Unity 配置:typeConverter的使用    public interface ILogger
    }

配置文件:

Unity 配置:typeConverter的使用<?xml version="1.0" encoding="utf-8" ?>
Unity 配置:typeConverter的使用
<configuration>
Unity 配置:typeConverter的使用    
<configSections>
Unity 配置:typeConverter的使用        
<section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection,
Unity 配置:typeConverter的使用                 Microsoft.Practices.Unity.Configuration, Version=1.0.0.0,
Unity 配置:typeConverter的使用                 Culture=neutral, PublicKeyToken=31bf3856ad364e35"
 />
Unity 配置:typeConverter的使用    
</configSections>
Unity 配置:typeConverter的使用    
<unity>
Unity 配置:typeConverter的使用        
<typeAliases>
Unity 配置:typeConverter的使用            
<typeAlias alias="string" type="System.String, mscorlib" />
Unity 配置:typeConverter的使用
Unity 配置:typeConverter的使用            
<!-- Lifetime manager types -->
Unity 配置:typeConverter的使用            
<typeAlias alias="singleton"
Unity 配置:typeConverter的使用                 type
="Microsoft.Practices.Unity.ContainerControlledLifetimeManager,
Unity 配置:typeConverter的使用               Microsoft.Practices.Unity"
 />
Unity 配置:typeConverter的使用            
<typeAlias alias="external"
Unity 配置:typeConverter的使用                 type
="Microsoft.Practices.Unity.ExternallyControlledLifetimeManager,
Unity 配置:typeConverter的使用               Microsoft.Practices.Unity"
 />
Unity 配置:typeConverter的使用
Unity 配置:typeConverter的使用            
<!-- User-defined type aliases -->
Unity 配置:typeConverter的使用            
<typeAlias alias="ILogger" type="UnityDemo.ILogger, UnityDemo" />
Unity 配置:typeConverter的使用            
<typeAlias alias="FlatFileLogger" type="UnityDemo.FlatFileLogger, UnityDemo" />
Unity 配置:typeConverter的使用            
<typeAlias alias="Message" type="UnityDemo.Message, UnityDemo" />
Unity 配置:typeConverter的使用        
</typeAliases>
Unity 配置:typeConverter的使用        
<containers>
Unity 配置:typeConverter的使用            
<container name="containerOne">
Unity 配置:typeConverter的使用                
<types>
Unity 配置:typeConverter的使用                     
<type type="ILogger" mapTo="FlatFileLogger"/>
Unity 配置:typeConverter的使用                </types>
Unity 配置:typeConverter的使用            
</container>
Unity 配置:typeConverter的使用        
</containers>
Unity 配置:typeConverter的使用    
</unity>
Unity 配置:typeConverter的使用
</configuration>

一运行程序就报错,那是因为Message类的构造函数是私有的,Unity无法自动装配。

本来父对象的构造函数如果需要指定具体值,可以通过修改配置文件来达到目的,配置修改如下:

Unity 配置:typeConverter的使用<type type="ILogger" mapTo="FlatFileLogger">
Unity 配置:typeConverter的使用                        
<typeConfig extensionType="Microsoft.Practices.Unity.Configuration.TypeInjectionElement,
Unity 配置:typeConverter的使用                                     Microsoft.Practices.Unity.Configuration"
>
Unity 配置:typeConverter的使用                            
<constructor>
Unity 配置:typeConverter的使用                                
<param name="message" parameterType="Message">
Unity 配置:typeConverter的使用                                    
<value value="Some Value"></value>
Unity 配置:typeConverter的使用                                
</param>
Unity 配置:typeConverter的使用                            
</constructor>
Unity 配置:typeConverter的使用                        
</typeConfig>
Unity 配置:typeConverter的使用                    
</type>

但现在还有一个问题,就是由于参数message的类型是自定义类型,不是像string, int等系统类型, 按以上配置是无法把一个Message的实例传给FlatFileLogger的构造函数的。这时就需要用到typeConverter,把value中的值转换成一个Message的实例。

LoggerConverter:

Unity 配置:typeConverter的使用   public class LoggerConverter : TypeConverter
    }

 修改后最终的配置文件:

Unity 配置:typeConverter的使用<?xml version="1.0" encoding="utf-8" ?>
Unity 配置:typeConverter的使用
<configuration>
Unity 配置:typeConverter的使用    
<configSections>
Unity 配置:typeConverter的使用        
<section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection,
Unity 配置:typeConverter的使用                 Microsoft.Practices.Unity.Configuration, Version=1.0.0.0,
Unity 配置:typeConverter的使用                 Culture=neutral, PublicKeyToken=31bf3856ad364e35"
 />
Unity 配置:typeConverter的使用    
</configSections>
Unity 配置:typeConverter的使用    
<unity>
Unity 配置:typeConverter的使用        
<typeAliases>
Unity 配置:typeConverter的使用            
<typeAlias alias="string" type="System.String, mscorlib" />
Unity 配置:typeConverter的使用
Unity 配置:typeConverter的使用            
<!-- Lifetime manager types -->
Unity 配置:typeConverter的使用            
<typeAlias alias="singleton"
Unity 配置:typeConverter的使用                 type
="Microsoft.Practices.Unity.ContainerControlledLifetimeManager,
Unity 配置:typeConverter的使用               Microsoft.Practices.Unity"
 />
Unity 配置:typeConverter的使用            
<typeAlias alias="external"
Unity 配置:typeConverter的使用                 type
="Microsoft.Practices.Unity.ExternallyControlledLifetimeManager,
Unity 配置:typeConverter的使用               Microsoft.Practices.Unity"
 />
Unity 配置:typeConverter的使用
Unity 配置:typeConverter的使用            
<!-- User-defined type aliases -->
Unity 配置:typeConverter的使用            
<typeAlias alias="ILogger" type="UnityDemo.ILogger, UnityDemo" />
Unity 配置:typeConverter的使用            
<typeAlias alias="FlatFileLogger" type="UnityDemo.FlatFileLogger, UnityDemo" />
Unity 配置:typeConverter的使用            
<typeAlias alias="LoggerConverter" type="UnityDemo.LoggerConverter, UnityDemo" />
Unity 配置:typeConverter的使用            
<typeAlias alias="Message" type="UnityDemo.Message, UnityDemo" />
Unity 配置:typeConverter的使用        
</typeAliases>
Unity 配置:typeConverter的使用        
<containers>
Unity 配置:typeConverter的使用            
<container name="containerOne">
Unity 配置:typeConverter的使用                
<types>
Unity 配置:typeConverter的使用                     
<type type="ILogger" mapTo="FlatFileLogger" name="FlatFileLogger" />
Unity 配置:typeConverter的使用                     
<type type="ILogger" mapTo="DatabaseLogger" name="DatabaseLogger"/>
Unity 配置:typeConverter的使用                     
Unity 配置:typeConverter的使用                     
<type type="ILogger" mapTo="FlatFileLogger">
Unity 配置:typeConverter的使用                        
<typeConfig extensionType="Microsoft.Practices.Unity.Configuration.TypeInjectionElement,
Unity 配置:typeConverter的使用                                     Microsoft.Practices.Unity.Configuration"
>
Unity 配置:typeConverter的使用                            
<constructor>
Unity 配置:typeConverter的使用                                
<param name="message" parameterType="Message">
Unity 配置:typeConverter的使用                                    
<value value="FlatFileLogger" type="Message" typeConverter="LoggerConverter"></value>
Unity 配置:typeConverter的使用                                
</param>
Unity 配置:typeConverter的使用                            
</constructor>
Unity 配置:typeConverter的使用                        
</typeConfig>
Unity 配置:typeConverter的使用                    
</type>
Unity 配置:typeConverter的使用                    
Unity 配置:typeConverter的使用                
</types>
Unity 配置:typeConverter的使用            
</container>
Unity 配置:typeConverter的使用        
</containers>
Unity 配置:typeConverter的使用    
</unity>
Unity 配置:typeConverter的使用
</configuration>

经过修改后,程序终于可以正常运行了。
运行结果:
Unity 配置:typeConverter的使用 

本文代码

相关文章:

  • 2021-12-17
  • 2022-12-23
  • 2021-05-18
  • 2021-11-10
  • 2022-12-23
  • 2021-09-08
  • 2021-06-22
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2021-07-23
  • 2021-08-08
  • 2021-12-11
相关资源
相似解决方案