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

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://unity3d.9tech.cn/news/2014/0208/39766.html

转载于:https://www.cnblogs.com/chinadeveloper/p/6184307.html

Unity中使用多构造函数(转)相关推荐

  1. 关于Unity中的UGUI优化,你可能遇到这些问题

    一.界面制作 Q1:UGUI里的这个选项 ,应该是ETC2拆分Alpha通道的意思,但是在使用中并没起作用?请问有没有什么拆分的标准和特别要求呢? 据我们所知,alpha split 的功能最初只对 ...

  2. ugui unity 取消选择_关于Unity中的UGUI优化,你可能遇到这些问题

    ​关键字 界面制作 ​网格重建 ​界面切换 ​加载相关 ​字体 ​ 一.界面制作 Q1:UGUI里的这个选项 ,应该是ETC2拆分Alpha通道的意思,但是在使用中并没起作用?请问有没有什么拆分的标准 ...

  3. Unity中的矩阵含义

    Unity中的矩阵含义 本人第一次写博文,不足的地方请大家指出来,我不会详解它的计算是什么样的,因为同类文章有很多,这个如果读者感兴趣可以自己学习一下相关的手册和知识. 什么是矩阵 简单的说,矩阵就是 ...

  4. 在Unity中创建基于Node节点的编辑器 (二) 窗口序列化

    孙广东  2018.5.13 csdn 的产品 , 真垃圾, 不想吐槽了, 文章保存就丢!     没办法  .    怎么不满意, 还是得继续用, 哎~~~ 第二部分 在Unity中序列化基于节点的 ...

  5. Unity中一些小技巧

    在unity中有一些小技巧,不能像人物的移动,攻击等有好几种方式可以用来单独成章,因此就把一些内容比较少,但是比较重要的内容放在一起合成一章,内容将会持续更新 1.人物死亡动画的播放:人物死亡后,需要 ...

  6. Unity中的GUI编程

    原文地址 在这篇文章中我将给读者介绍Unity中的图形用户界面(GUI)编程.Unity有一个非常强大的GUI脚本API.它允许你使用脚本快速创建简单的菜单和GUI. 简介 Unity提供了使用脚本创 ...

  7. Unity中的Delegate

    详解Unity中的委托与事件 阅读目录 0x00 前言 0x01 从观察者模式说起 0x02 向Unity3D中的SendMessage和BroadcastMessage说拜拜 0x03 认识回调函数 ...

  8. 使用新的输入系统在 Unity 中构建第三人称控制器

    如果你随机挑选几款游戏,每款游戏可能会有不同的艺术风格和机制.不同的故事,甚至根本没有故事,但它们都有一个共同点:所有游戏都需要读取和处理输入来自键盘.鼠标.游戏手柄.操纵杆.VR 控制器等设备. 构 ...

  9. Unity中游戏存档方式

    ##游戏存档 ####在Unity中游戏存档有如下四种方式: PlayerPrefs c#序列化 XML序列化 Json **原文链接:**http://blog.csdn.net/a23765363 ...

最新文章

  1. 将数组A中的内容和数组B中的内容进行交换(数组一样大)
  2. Entity Framework的启动速度优化
  3. URL和URI的区别 【转】
  4. C语言的特点与执行程序基本步骤
  5. Android面试题目之四: 归并排序
  6. ROS知识【12】:用户的功能包覆盖系统功能包
  7. xml文件转换成图片_如何把pdf文件转换成图片?
  8. 创建 linuxrc 文件
  9. 60级怀旧服最新服务器人口排名,魔兽世界怀旧服10月最新人口普查详情 各大服务器阵营详细比例...
  10. 【欢迎大家一起交流讨论】关于Word的自动检测修改--论文格式修正系统(毕业设计)...
  11. java sts安装步骤_下载并安装Java开发工具STS
  12. C# 后端代码中使用事务
  13. 4.3.2 信道编码 ——卷积码
  14. ASO优化方法_获取ASO关键词指数接口
  15. win10分辨率设置_雷电模拟器如何设置分辨率
  16. 最小割集stoer_wagner算法
  17. PS 渐变工具(锥形【线性渐变】和圆形【径向渐变】)
  18. USACO 2019 February Contest Platinum T3: Mowing Mischief
  19. vs2022 E1696 无法打开 源 文件 “string.h“
  20. javacv+远程视频直播+音视频录制+视频抓取

热门文章

  1. Android JNI学习(六)——Java与Native实战演习
  2. url中找出IP地址
  3. linux kernel 下的hash 和链表 应用
  4. Linux内核小笔记:spin_lock锁内不能使用sleep休眠
  5. mysql ddl备份_MySQL 常用DDL执行方式总结
  6. 【java】java 分支预测 Java处理排序后的数组比没有排序的快
  7. 【Flink】Flink 实现 End to End 的 EXACTLY_ONCE
  8. 【Elasticsearch】解决Elasticsearch HTTP方式查询报SocketTimeoutException的问题 Connection reset by peer
  9. 【java】高并发之限流 RateLimiter使用
  10. 【Druid】Druid简介