博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Unity中使用多构造函数
阅读量:6413 次
发布时间:2019-06-23

本文共 1861 字,大约阅读时间需要 6 分钟。

如果要实例化的类只有一个构造函数, 则使用方法很简单使用方法如下:

1
2
3
4
5
6
7
using (IUnityContainer container =
new 
UnityContainer())
{
    
UnityConfigurationSection section = (UnityConfigurationSection)ConfigurationManager.GetSection(
"unity"
);
    
section.Configure(container);    
//...
    
ILogger logger = container.Resolve<ILogger>(
"DatabaseLogger"
);
    
return 
logger;
}

其中配置文件为

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?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>
        
<types>
          
<type type=
"Bery.ILogger, UnityStudy" 
mapTo=
"Bery.DatabaseLogger, UnityStudy" 
name=
"DatabaseLogger"
>
          
</type>
        
</types>
      
</container>
    
</containers>
  
</unity>
</configuration>

如果DatabaseLogger类中的有两个构造函数, 代码如下

1
2
3
4
5
6
public DatabaseLogger()
}
public DatabaseLogger(string name)
{
}

则Unity自动使用参数最多的构造函数进行创建对象, 会抛出以下异常:

1
2
3
Microsoft.Practices.Unity.ResolutionFailedException: Resolution of the dependency failed, type =
"Bery.ILogger"
, name =
"DatabaseLogger"
.
Exception occurred
while
:
while 
resolving.
Exception is: InvalidOperationException - The type String cannot be constructed. You must configure the container to supply
this 
value.

如果您想让它使用无参的构造函数创建, 则要使用[InjectionConstructor]特性进行修饰无参的构造函数,

1
2
3
4
[InjectionConstructor]
public DatabaseLogger()
}

若您想使用带参数的构造函数创建对象, 除了在构造函数上使用[InjectionConstructor]外, 还要在创建时传递参数,代码如下

1
2
3
4
5
6
7
8
9
10
using (IUnityContainer container =
new 
UnityContainer())
{
    
UnityConfigurationSection section = (UnityConfigurationSection)ConfigurationManager.GetSection(
"unity"
);
    
section.Configure(container);
    
ILogger logger = container.Resolve<ILogger>(
"DatabaseLogger"
,
        
new 
ParameterOverrides{
        
{
"name"
,
"logName"
}
    
});
    
return 
logger;

转载地址:http://usdra.baihongyu.com/

你可能感兴趣的文章
CSS滤镜及渐变 (filter样式表属性)
查看>>
调用上面的@InitBinder 解决客户端上传时间参数转换的问题
查看>>
net.sf.json.JSONException: There is a cycle in the hierarchy异常,解决方法
查看>>
Android自动化测试方向
查看>>
QT中常用数据之间转换
查看>>
向量的内积,长度,正交性
查看>>
app包中的fragment和v4包中的fragment的使用的区别
查看>>
Http协议与缓存
查看>>
监测超过特定内存阀值进程并结束
查看>>
Linux Centos 查询信息
查看>>
android adb命令
查看>>
python “双”稀疏矩阵转换为最小联通量“单”矩阵
查看>>
揭秘天猫双11背后:20万商家600万张海报,背后只有一个鹿班
查看>>
重置mysq root密码脚本
查看>>
我的友情链接
查看>>
MHA配置参数
查看>>
深入理解Lock
查看>>
vim的块选择
查看>>
HTML --块
查看>>
在DLL中获取主进程窗口句柄
查看>>