/*
* 演示Unity 注入
* */
using Microsoft.Practices.Unity;
using System; namespace Unity.Property.Inject
{
class Program
{
public static IUnityContainer container; static void Main(string[] args)
{
container = new UnityContainer(); //PropertyInject();
//ConstructorInject();
MethodInject(); Console.ReadLine();
} /// <summary>
/// 构造注入
/// </summary>
static void ConstructorInject()
{
Console.WriteLine("构造注入");
container.RegisterType<ILog, ALog>();
//container.RegisterType<ILog, BLog>(); container.RegisterType<IPeople, Man>();
//container.RegisterType<IPeople, Woman>(); var people = container.Resolve<IPeople>();
people.Print2();
} /// <summary>
/// 属性注入
/// </summary>
static void PropertyInject()
{
Console.WriteLine("属性注入");
//通过Register不同的ILog的派生类型,达到用不同的日志组件进行打印 //container.RegisterType<ILog, ALog>();
container.RegisterType<ILog, BLog>(); container.RegisterType<IPeople, Man>();
//container.RegisterType<IPeople, Woman>(); var people = container.Resolve<IPeople>();
people.Print();
} static void MethodInject()
{
Console.WriteLine("函数注入");
//通过Register不同的ILog的派生类型,达到用不同的日志组件进行打印 //container.RegisterType<ILog, ALog>();
container.RegisterType<ILog, BLog>(); container.RegisterType<IPeople, Man>();
//container.RegisterType<IPeople, Woman>(); var people = container.Resolve<IPeople>();
people.Logger.Write("函数注入 " + people.Logger != null ? "成功" : "失败");
}
} public interface IPeople
{
/// <summary>
/// 属性注入用
/// </summary>
ILog Logger { get; set; } /// <summary>
/// 构造注入用
/// </summary>
ILog Logger2 { get; set; } String Name { get; set; } String Sex { get; set; } /// <summary>
/// 属性注入用
/// </summary>
void Print(); /// <summary>
/// 构造注入用
/// </summary>
void Print2(); /// <summary>
/// 函数注入用
/// </summary>
void Print3(ILog logger);
} public class Man : IPeople
{
[Dependency]
public ILog Logger { get; set; }
public ILog Logger2 { get; set; } public string Name { get; set; } public string Sex { get; set; } public Man(ILog logger2) { this.Logger2 = logger2; } public void Print()
{
Logger.Write(base.ToString());
} public void Print2()
{
Logger.Write(base.ToString());
} [InjectionMethod]
public void Print3(ILog logger)
{
this.Logger = logger;
}
} public class Woman : IPeople
{ [Dependency]
public ILog Logger { get; set; }
public ILog Logger2 { get; set; } public string Name { get; set; } public string Sex { get; set; } public Woman(ILog logger2) { this.Logger2 = logger2; } public void Print()
{
Logger.Write(base.ToString());
} public void Print2()
{
Logger.Write(base.ToString());
} [InjectionMethod]
public void Print3(ILog logger)
{
this.Logger = logger;
}
} public interface ILog
{
void Write(String msg);
} public class ALog : ILog
{
public void Write(String msg) { Console.WriteLine("[A] {0}", msg); }
} public class BLog : ILog
{
public void Write(String msg) { Console.WriteLine("[B] {0}", msg); }
}
}

unity 三种注入示例的更多相关文章

  1. .NetCore中三种注入方式的思考

    该篇内容由个人博客点击跳转同步更新!转载请注明出处! .NetCore彻底诠释了"万物皆可注入"这句话的含义,在.NetCore中到处可见注入的使用.因此core中也提供了三种注入 ...

  2. spring ioc三种注入方式

    spring ioc三种注入方式 IOC ,全称 (Inverse Of Control) ,中文意思为:控制反转 什么是控制反转? 控制反转是一种将组件依赖关系的创建和管理置于程序外部的技术. 由容 ...

  3. Spring IOC 三种注入方式

    1.    接口注入 2.    setter注入 3.    构造器注入 对象与对象之间的关系可以简单的理解为对象之间的依赖关系:A类需要B类的一个实例来进行某些操作,比如在A类的方法中需要调用B类 ...

  4. Spring IOC以及三种注入方式

    IOC是spring的最基础部分,也是核心模块,Spring的其他组件模块和应用开发都是以它为基础的.IOC把spring的面向接口编程和松耦合的思想体现的淋漓尽致. IOC概念 IOC(Invers ...

  5. Spring的三种注入方式(Setter、构造函数和自动注入)

    一.Setter注入 这里我是希望在Student.java中调用Course.java中的内容. public class Course { public String name = "数 ...

  6. Spring IOC 中三种注入方式

    项目错误知识点记录 正文 最近在项目的时候,用到Spring框架,Spring框架提供了一种IOC的自动注入功能,可以很轻松的帮助我们创建一个Bean,这样就省的我们四处写new Object()这样 ...

  7. Spring IOC 三种注入方式(构造器,setter,接口)

    Spring的依赖注入有三种方式: 1,构造器注入 2,setter注入 3,接口注入 下面我给大家介绍一下这三种注入 1.构造器注入 构造器注入主要是依赖于构造方法去实现,构造方法可以是有参也可以是 ...

  8. Spring学习日记01_IOC_xml的三种注入方式

    什么是IOC 控制反转,把对象创建和对象之间的调用过程,交给Spring进行管理 使用IOC目的:为了耦合度降低 做入门案例就是IOC实现 IOC底层原理 xml解析 工厂模式 反射 原始方式 cla ...

  9. Spring IOC三种注入方式(接口注入、setter注入、构造器注入)(摘抄)

    IOC ,全称 (Inverse Of Control) ,中文意思为:控制反转, Spring 框架的核心基于控制反转原理. 什么是控制反转?控制反转是一种将组件依赖关系的创建和管理置于程序外部的技 ...

随机推荐

  1. css实战第三天小结

    1.谈一谈对层级的理解: 如果对两个并列的子元素都设置了相对于同一个父元素(如果没有设置父元素那么默认相对于浏览器而言)进行了定位(相对定位),则这两个都具有相同的层级(默认为0),他们的trbl也默 ...

  2. call与apply简单介绍

    var pet={ word:'...', speak:function(say){ console.log(say+' '+this.word) } } //pet.speak('speak')// ...

  3. Linux之文档与目录结构 (/ 用法, 相对路径,绝对路径)

    Linux之文档与目录结构   Linux文件系统结构 Linux目录结构的组织形式和Windows有很大的不同.首先Linux没有“盘(C盘.D盘.E盘)”的概念.已经建立文件系统的硬盘分区被挂载到 ...

  4. 给博客添加fork me on github图标

    首先挑选想要的图标样式 https://blog.github.com/2008-12-19-github-ribbons/ 效果和代码如图 打开博客后台设置,页首html设置 讲网页右边的代码粘贴过 ...

  5. 零基础学习python_列表和元组(10-13课)

    一时兴起今天又回过头来补一下列表和元组,先来说说列表哈,列表其实是python最经常用到的数据类型了,不仅经常用还很强大呢,这个跟C语言里面的数组是类似的,列表当然也可以增删改查,不过我可没打算用之前 ...

  6. Maven依赖下载速度慢,不用怕,这么搞快了飞起

    一.背景 众所周知,Maven对于依赖的管理让我们程序员感觉爽的不要不要的,但是由于这货是国外出的,所以在我们从中央仓库下载依赖的时候,速度如蜗牛一般,让人不能忍,并且这也是大多数程序员都会遇到的问题 ...

  7. 8.纯 CSS 创作一个充电 loader 特效

    原文地址:https://segmentfault.com/a/1190000014669547 右边多出来的是 :after 的border HTML代码: <div class=" ...

  8. python中的remove

    remove()从左到右寻找,移除找到的第一个指定元素,举个例子: 1 a = ["hello", "world", "world", &q ...

  9. 【Flex】自定义组件-combobox组件

    1包结构 2 Test.mxml <?xml version="1.0" encoding="utf-8"?> <s:Application ...

  10. oracle 相关操作

    1,SqlPlus 的使用 1.01,软登入:sqlplus /nolog 1.02,登入 dba 用户:sqlplus /as sysdba 2,用户相关操作 2.01,创建用户:create us ...