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的更多相关文章

  1. Unity3d入门 - 关于unity工具的熟悉

    上周由于工作内容较多,花在unity上学习的时间不多,但总归还是学习了一些东西,内容如下: .1 根据相关的教程在mac上安装了unity. .2 学习了unity的主要的工具分布和对应工具的相关的功 ...

  2. 聊聊Unity项目管理的那些事:Git-flow和Unity

    0x00 前言 目前所在的团队实行敏捷开发已经有了一段时间了.敏捷开发中重要的一个话题便是如何对项目进行恰当的版本管理.项目从最初使用svn到之后的Git One Track策略再到现在的GitFlo ...

  3. Unity游戏内版本更新

    最近研究了一下游戏内apk包更新的方法. ios对于应用的管理比较严格,除非热更新脚本,不太可能做到端内大版本包的更新.然而安卓端则没有此限制.因此可以做到不跳到网页或应用商店,就覆盖更新apk包. ...

  4. Unity 序列化

    Script Serialization http://docs.unity3d.com/Manual/script-Serialization.html 自定义序列化及例子: http://docs ...

  5. Unity 序列化 总结

    查找了 Script Serialization http://docs.unity3d.com/Manual/script-Serialization.html 自定义序列化及例子: http:// ...

  6. ASP.NET MVC5+EF6+EasyUI 后台管理系统(64)-补充WebApi与Unity注入-配置文件

    系列目录 上一篇演示了WebApi利用Unity注入 很多人问我如何用配置文件来配置注入,本节演示如何利用配置文件来注入,道理是一样的,跳转到上一节下载源码一起来动手! 1.打开源码定位到文件Depe ...

  7. ASP.NET MVC5+EF6+EasyUI 后台管理系统(64)-WebApi与Unity注入

    系列目录 前言: 有时候我们系统需要开放数据给手机App端或其他移动设备,不得不说Asp.net WebApi是目前首选 本节记录Asp.net MVC WebApi怎么利用Unity注入.系列开头已 ...

  8. 使用Microsoft的IoC框架:Unity来对.NET应用进行解耦

    1.IoC/DI简介 IoC 即 Inversion of Control,DI 即 Dependency Injection,前一个中文含义为控制反转,后一个译为依赖注入,可以理解成一种编程模式,详 ...

  9. Unity C#最佳实践(上)

    本文为<effective c#>的读书笔记,此书类似于大名鼎鼎的<effective c++>,是入门后提高水平的进阶读物,此书提出了50个改进c#代码的原则,但是由于主要针 ...

  10. Unity插件之plyGame教程:DiaQ对话系统

    本文为孤月蓝风编写,转载请注明出处:http://fengyu.name/?cat=game&id=296 DiaQ是plyGame旗下的一款对话及任务系统.拥有可视化的对话及任务编辑器,能够 ...

随机推荐

  1. Chrome浏览器调试技巧

    本文主要讲解针对chrome浏览器的调试方案,对于其他浏览器其实大同小异. 先来入门一点的 DOM元素调试 看上图: 以上图表明的1,2,3,4,5标记说明: 1,为移动设备模拟器,chorme现在是 ...

  2. Java----前端验证之验证码额实现

    验证码是常用的登录验证方式之一,最大的作用就是保证安全,验证码的生成在java中实现的方式有很多种,比如后台生成传输到前端页面,在前台直接生成进行验证,下面写一个最简单实现验证码验证登录的例子. 生成 ...

  3. Java---Ajax在Struts2框架的应用实例

    Ajax 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术. 很久没有动过ajax了,趁此机会复习一下,写一个简单的例子 一.项目结构: 二.需要的jar包 三.具体代码: 1.web.x ...

  4. java.lang.IllegalStateException: attempt to re-open an already-closed object

    attempt to re-open an already-closed object 字面理解,试图再次打开已经关闭的对象.这是我在操作sqlited的时候出现的错误, 我在一个activity里面 ...

  5. Swift开发教程--使用Storyboard进行界面跳转

    使用storyboard结合代码来做确实能够给开发带来非常多的便利. 在实践的过程中,我们常常会遇到界面的跳转问题. 通过控件和界面的建立的"连接"就能够了. 假设是navigat ...

  6. 趋势科技PC-cillin2015,你来公測我发奖!

    watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaXF1c2hp/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/d ...

  7. poj 2034 Anti-prime Sequences(dfs)

    //相邻的 2.3......d 之和都要不为素数 # include <algorithm> # include <stdio.h> using namespace std; ...

  8. Ubuntu下关闭防火墙

    默认情况下ubuntu无firewall,除非你自己安装了,怎么装的就怎么删呗. . 假设是已启用的自备的iptables 删了即可了 sudo apt-get remove iptables.

  9. 数学之美?编程之美?数学 + 编程= unbelievable 美!

    欢迎大家前往腾讯云社区,获取更多腾讯海量技术实践干货哦~ 作者:Rusu 导语 相信大家跟我一样,偶尔会疑惑:曾经年少的时候学习过的那么多的复杂的数学函数,牛逼的化学方程式,各种物理原理.公式,到底有 ...

  10. (转)Maven依赖的jar包下载不了、jar更新不了的解决办法

    场景一: 使用Maven的同学可能偶尔会遇到这种情况:pom.xml中依赖了项目需要的某个jar文件,但是使用Maven –> update project 还是没办法下载该jar到项目中,你可 ...