c#的unity
1.引用对象 2.在app.config中进行配置
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="unity"
type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection,
Microsoft.Practices.Unity.Configuration" />
</configSections>
<unity configSource="unity.config" /> </configuration>
这里unity的配置是在unity.config中进行配置的。 代码如下: <unity xmlns="http://schemas.microsoft.com/practices/2010/unity">
<!--alias 定义別名-->
<alias alias="IClass" type="ConsoleApplication1.IClass, ConsoleApplication1" />
<alias alias="MyClass" type="ConsoleApplication1.MyClass, ConsoleApplication1" />
<!--引入下面的命名空间,可以省的输入过多的內容-->
<namespace name="ConsoleApplication1" />
<assembly name="ConsoleApplication1" /> <container >
<register type="IClass" mapTo="MyClass" />
<register type="ILogger" mapTo="FileLogger"></register> <!--注册类+构造函数 默认值是3-->
<register type="InstallerBase" mapTo="BlogInstaller">
<constructor>
<param name="pubContext" type="IPubContext" />
<param name="sum" type="System.Int32" value="3" />
</constructor>
</register> <!--<register type="ISomeInterface[]" mapTo="MyTypeImplementingSomeInterface[]"/>-->
<register type="ISomeInterface[System.Int32]" mapTo="MyTypeImplementingSomeInterface[System.Int32]"/> <register type="ObjectWithOverloads" name="callFirstOverload">
<method name="CallMe">
<param name="param" type="int" value="17"/>
</method>
</register> <register type="ILogger" mapTo="MockLogger" name="validLogger" />
<register type="ObjectUsingLogger" name="dependencyRegistered">
<property name="Logger">
<optional name="validLogger" />
</property>
</register>
<!--数值-->
<register type="ILogger" name="main" mapTo="MockLogger" />
<register type="ILogger" name="another" mapTo="MockLogger" />
<register type="ILogger" name="special" mapTo="SpecialLogger" />
<register type="ArrayDependencyObject" name="specificElements">
<property name="Loggers">
<array>
<dependency name="main" />
<dependency name="another" />
</array>
</property>
</register>
</container> </unity> 3.关于配置 <!--alias 定义別名-->
<alias alias="IClass" type="ConsoleApplication1.IClass, ConsoleApplication1" /> <!--引入下面的命名空间,可以省的输入过多的內容-->
<namespace name="ConsoleApplication1" /> 4.实例说明 4.1 定义UnityContainer,并初始化用配置文件中的数据 var container = new UnityContainer(); UnityConfigurationSection configuration = (UnityConfigurationSection)ConfigurationManager.GetSection("unity"); configuration.Configure(container); 4.注册简单接口 <register type="IClass" mapTo="MyClass" /> 代码如下: interface IClass
{
void ShowInfo();
}
class MyClass:IClass
{
[Dependency]//实例话对象
public virtual IPubContext Context { set; get; }
#region IClass 成员
public void ShowInfo()
{
Console.WriteLine("MyClass12");
} #endregion
} 调用: IClass classInfo = container.Resolve<IClass>();
classInfo.ShowInfo();
4.3 如果对象中有属性,需要初始化,可以在属性上加[Dependency]//实例化对象,那么在取得对象时,这个属性会被初始化。 如上例中的IPubContext 属性。
class IPubContext
{
public string Name { set; get; }
} 4.4 带构造函数的实例配置 <register type="InstallerBase" mapTo="BlogInstaller">
<constructor>
<param name="pubContext" type="IPubContext" />
<param name="sum" type="System.Int32" value="3" />
</constructor>
</register>
定义类型如下: class BlogInstaller : InstallerBase
{
private IPubContext pubContext;
private int sum;
public BlogInstaller(IPubContext pubContext,int sum)
{
this.pubContext = pubContext;
} #region InstallerBase 成员 public void ShowInfo()
{
Console.WriteLine("FileLogger12InstallerBase");
} #endregion
} interface InstallerBase
{
void ShowInfo();
}
代码调用如下: InstallerBase classInstallerBase = container.Resolve<InstallerBase>();
classInstallerBase.ShowInfo(); 其中,构造函数是: public BlogInstaller(IPubContext pubContext,int sum)
{
this.pubContext = pubContext;
} 与配置文件中的参数是一一对应的。并且配置文件中对与sum这个属性,有默认数值是3. 4.5 泛型类型配置 <register type="ISomeInterface[]" mapTo="MyTypeImplementingSomeInterface[]"/> 代码如下定义: public interface ISomeInterface<T>
{ } public class MyTypeImplementingSomeInterface<T> : ISomeInterface<T>
{ } 代码调用如下: ISomeInterface<int> some = container.Resolve<ISomeInterface<int>>(); 4.6 配置方法的执行 <register type="ObjectWithOverloads" name="callFirstOverload">
<method name="CallMe">
<param name="param" type="int" value="17"/>
</method>
</register>
定义类callFirstOverload,并且定义方法CallMe: /// <summary>
/// 执行方法
/// </summary>
class ObjectWithOverloads
{
public int FirstOverloadCalls;
public int SecondOverloadCalls; public void CallMe(int param)
{
++FirstOverloadCalls;
} public void CallMe(string param)
{
++SecondOverloadCalls;
}
} 代码调用: //执行方法
var result = container.Resolve<ObjectWithOverloads>("callFirstOverload");
Console.WriteLine(result.FirstOverloadCalls);
4.7 数组配置
<!--数組-->
<register type="ILogger" name="main" mapTo="MockLogger" />
<register type="ILogger" name="another" mapTo="MockLogger" />
<register type="ILogger" name="special" mapTo="SpecialLogger" />
<register type="ArrayDependencyObject" name="specificElements">
<property name="Loggers">
<array>
<dependency name="main" />
<dependency name="another" />
</array>
</property>
</register>
复制代码
定义类: class ArrayDependencyObject
{
public ILogger[] Loggers { get; set; } public string[] Strings { get; set; }
}
class SpecialLogger : ILogger
{ #region ILogger 成员 public void ShowInfo()
{
throw new NotImplementedException();
} #endregion
} 代码调用: var result2 = container.Resolve<ArrayDependencyObject>("specificElements"); 可以看到result2执行完成后,会得到 result2.Loggers数組,这个数组包括2个对象,一个是main 另一个是another,都是ILogger对象。
c#的unity的更多相关文章
- Unity3d入门 - 关于unity工具的熟悉
上周由于工作内容较多,花在unity上学习的时间不多,但总归还是学习了一些东西,内容如下: .1 根据相关的教程在mac上安装了unity. .2 学习了unity的主要的工具分布和对应工具的相关的功 ...
- 聊聊Unity项目管理的那些事:Git-flow和Unity
0x00 前言 目前所在的团队实行敏捷开发已经有了一段时间了.敏捷开发中重要的一个话题便是如何对项目进行恰当的版本管理.项目从最初使用svn到之后的Git One Track策略再到现在的GitFlo ...
- Unity游戏内版本更新
最近研究了一下游戏内apk包更新的方法. ios对于应用的管理比较严格,除非热更新脚本,不太可能做到端内大版本包的更新.然而安卓端则没有此限制.因此可以做到不跳到网页或应用商店,就覆盖更新apk包. ...
- Unity 序列化
Script Serialization http://docs.unity3d.com/Manual/script-Serialization.html 自定义序列化及例子: http://docs ...
- Unity 序列化 总结
查找了 Script Serialization http://docs.unity3d.com/Manual/script-Serialization.html 自定义序列化及例子: http:// ...
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(64)-补充WebApi与Unity注入-配置文件
系列目录 上一篇演示了WebApi利用Unity注入 很多人问我如何用配置文件来配置注入,本节演示如何利用配置文件来注入,道理是一样的,跳转到上一节下载源码一起来动手! 1.打开源码定位到文件Depe ...
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(64)-WebApi与Unity注入
系列目录 前言: 有时候我们系统需要开放数据给手机App端或其他移动设备,不得不说Asp.net WebApi是目前首选 本节记录Asp.net MVC WebApi怎么利用Unity注入.系列开头已 ...
- 使用Microsoft的IoC框架:Unity来对.NET应用进行解耦
1.IoC/DI简介 IoC 即 Inversion of Control,DI 即 Dependency Injection,前一个中文含义为控制反转,后一个译为依赖注入,可以理解成一种编程模式,详 ...
- Unity C#最佳实践(上)
本文为<effective c#>的读书笔记,此书类似于大名鼎鼎的<effective c++>,是入门后提高水平的进阶读物,此书提出了50个改进c#代码的原则,但是由于主要针 ...
- Unity插件之plyGame教程:DiaQ对话系统
本文为孤月蓝风编写,转载请注明出处:http://fengyu.name/?cat=game&id=296 DiaQ是plyGame旗下的一款对话及任务系统.拥有可视化的对话及任务编辑器,能够 ...
随机推荐
- MS OFFICE WORD 绝招
以MS OFFICE WORD 2010为例. 1.WORD 文件夹连接线(标准称呼:前导符)为什么有的稀,有的密? 答案:文件夹格式字体不同. 2.首页.文件夹页.正文有的要页眉,有的不要,首页不要 ...
- #include、#import与@class的使用与头文件循环引用问题
#include #include <>:一般是对系统库文件的引用,编译器会去系统文件文件夹下查找. #include "xxx.h":一般是对自己定义文件的引用,编译 ...
- WPF中展示HTML
业务需求:将具有表格信息的HTML片段在WPF中展示出来,并像网页端一样,可以进行input的填写,checkbox选择,最后以HTML的形式完成保存. 天真的以为直接引入WPF中的WebBrowse ...
- 【转载】解决refreshing gradle project 和Building gradle project info 一直卡住\速度慢
转载: http://blog.csdn.net/xx326664162/article/details/52002616 文章出自:薛瑄的博客 分析原因: 更改Gradle的版本后,或者更新AS后, ...
- spring boot https --restful接口篇
我们写的接口默认都是http形式的,不过我们的接口很容易被人抓包,而且一抓全是明文的挺尴尬的 spring boot配置https生成证书大的方向有3种: 1.利用keytool自己生成证书 2.从免 ...
- 推荐的五款市面上常用的免费CMS建站系统
我做设计也有不少年头了,很多客户或者朋友找我做网站的时候,一般问我的是用什么软件系统给他们做.大部分客户希望用的软件是免费的.所以今天给大家介绍五款我自己用过还不错的,重点是还免费的建站系统. Met ...
- 【java设计模式】【行为模式Behavioral Pattern】迭代器模式Iterator Pattern
package com.tn.pattern; public class Client { public static void main(String[] args) { Object[] objs ...
- mongodb 复制集
mongodb 复制集 复制集简介 Mongodb复制集由一组Mongod实例(进程)组成,包含一个Primary节点和多个Secondary节点,Mongodb Driver(客户端)的所有数据都写 ...
- IX-Protected Dataplane Operating System解读
一.概述 商业操作系统在应用程序每秒钟需要数百万次操作时才能保持高吞吐量和低(尾)延迟,对于最慢的请求只需几百微秒.通常认为对于高性能网络(小信息的高包率.低延迟)的构建,最好都是在内核之外构建用户态 ...
- SSH框架完全整合
大三学期渐末,事情也挺多的,上周就开始着手整合SSH框架,到现在才真正的完成,过程中碰到了许多小问题(小问题大折腾,哭脸.jpg).本着善始善终的原则,最终把它给完成了. 本篇文章就在: win7 6 ...