/*
* 演示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. [ZJOI2015]诸神眷顾的幻想乡(广义后缀自动机)

    /* 题目中的神仙性质真的是令人愉悦 因为我一眼看成了每个点的度数不超过二十, 心想这他喵的和字符串什么关系 统计树上不同子串个数, 按道理直接dfs n次把所有的串插到后缀自动机里就行了 但是我们发 ...

  2. 变量,if.elif .else判断

    一,计算机的了解 基本组成:主板+cpu+内存 cpu: 主频, 核数(16) 内存:大小(8G, 16G, 32G) 型号: DDR3, DDR4, DDR5,  主频(海盗船,玩家国度)      ...

  3. leetcode 852. Peak Index in a Mountain Array

    Input: [0,1,0] Output: 1 Input: [0,2,1,0] Output: 1解: 比较数组中的i和i-1的大小,如果前一位大于后一位数字,前一位则是结果 let ans = ...

  4. LeetCode 771 宝石和石头

    Input: J = "aA", S = "aAAbbbb" Output: 3 解:J为宝石字符串,S为包含宝石的字符串,J中的字母如果在S中出现数字就➕1 ...

  5. Ruby学习笔记4: 动态web app的建立

    Ruby学习笔记4: 动态web app的建立 We will first build the Categories page. This page contains topics like Art, ...

  6. openStack queens 功能验证调试

    linux已经加载 的内核模块查看

  7. 19.python设置单线程和多线程

    1.单线程实例: 代码如下: from time import ctime,sleep def music(A): for i in range(2): print ("I was list ...

  8. linux inode 详解 / 线上inode爆满解决方案

    本文大量参考阮一峰大神博客,整理笔记 之所以写inode文章是由于一次线上问题,引发对inode深入的思考. 磁盘的inode监控与磁盘空间的监控同等重要,线上服务器一定要做好磁盘inode与磁盘空间 ...

  9. NFS服务基本配置及使用

    操作系统:redhat 7.2 参考链接:https://www.cnblogs.com/dscode/p/6146409.html NFS:Network File System 一.服务器端配置 ...

  10. window.location.search的用法 和 地址栏的的javsscript编码与解码

    ocation.search是从当前URL的?号开始的字符串 如:http://www.51js.com/viewthread.php?tid=22720 它的search就是?tid=22720 e ...