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旗下的一款对话及任务系统.拥有可视化的对话及任务编辑器,能够 ...
随机推荐
- [睡前灵感and发散思维]由一个简单的数组比较问题而想到的
前言 据说,一只优秀的程序猿往往会有这样的经历,白天遇到一个绞尽脑汁也无法解决的问题,晚上睡了后,半夜在梦中会灵感涌现,立马起床,打开电脑,一气呵成.第二天如果不看注释,完全不知道自己找到了如此巧妙地 ...
- JSONArray - JSONObject - 遍历 \ 判断object空否
public static void main(String[] args) { String str = "[{name:'a',value:'aa'},{name:'b',value:' ...
- Windows Azure系列-- 配置Azure Power Shell
1.下载Azure Power shell https://azure.microsoft.com/en-us/documentation/articles/powershell-install-co ...
- Gradle笔记——构建基础
本篇文章主要介绍一下Gradle的构建基础. 它看起来似乎和android项目没多大关系.不能让人一下子理解android项目中的Gradle配置文件,可是这篇基础真的非常重要. 学习Gradle前, ...
- IDEA定位到类的代码区域(查看类的源码)
经常需要查看某一个类中的成员变量和方法,那么怎么进入到这个类的源码区域呢?在IDEA中只需要使用快捷键: ctrl+shift+t 就可以快速定位到这个类的源码.
- idea java 1.5 过时
解决方案: 1.修改maven的setting.xml文件,添加以下内容,此设置为jdk1.8 <profile> <id>jdk-1.8</id> <act ...
- Selenium Python 安装指导
最近无聊.又重新装了个selenium 果然时代变了.安装的时候的方法和以前不太一样了.因此觉得有必要单列出来加以说明 另外备注:测试小伙伴们.安装此类工具报错.尝试以下两个方案之一: 1.请转sta ...
- [转]ubuntu下安装fiddler
转 ubuntu下安装fiddler biangbiang 因为工作中需要用到fiddler工具 现在工作环境迁移到ubuntu14 下 发现fiddler只支持windows网上也有很多推荐 ...
- webpack加载多级依赖时css、html文件不能正确resolve的问题
在使用webpack+avalon以及avalon的mmRouter做SPA的时候,碰到一个困扰数周的问题:webpack加载多级依赖时出现了css文件和模板(html)文件不能正确resolve.原 ...
- 5.python函数
一.递归函数 如果一个函数在内部调用自身,那么这个函数就叫做递归函数. 1. 必须有一个明确的结束条件: 2. 每次进入更深一层递归时,问题规模相比上次递归都应有所减少: 3.递归效率不高,递归层次过 ...