/*
* 演示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. Java第一次上机实验源代码

    小学生计算题: package 第一次上机实验_; import java.util.*; public class 小学计算题 { public static void main(String[] ...

  2. es6(14)--iterator for ...of循环

    //iterator for ...of循环 { let arr=['hello','world']; let map=arr[Symbol.iterator](); console.log(map. ...

  3. linux学习思维导图(转)

    转自:https://blog.csdn.net/m1585761297/article/details/80017111 先附上一张学习路径的导图 导图一 导图二(一套) 1.Linux目录结构 2 ...

  4. python学习笔记目录

    人生苦短,我学python学习笔记目录: week1 python入门week2 python基础week3 python进阶week4 python模块week5 python高阶week6 数据结 ...

  5. [UGUI]图文混排(三):资源管理

    1.图文混排中的资源,主要是图片. 2.所谓的资源管理,可以分为资源对象池和资源加载这两部分.这里是为图文混排单独做一套资源管理,当然也可以改为调用项目中的资源管理. RichTextResource ...

  6. tornado运行提示OSError: [WinError 10048] 通常每个套接字地址(协议/网络地址/端口)只允许使用一次。

    找到占用端口的进程,kill掉 netstat -ano | find $(port) kill: tskill $(PID)

  7. 学习笔记:webpack

    http://wiki.jikexueyuan.com/project/webpack-handbook/ Webpack 中文指南 http://www.itzjt.cc/2017/04/09/we ...

  8. UML图基础知识

    一.UML简述 类是面向对象系统中最重要的构造块.类图显示了一组类.接口.协作以及他们之间的关系,通过类图,我们能够很好的掌握类与类之间的关系. 首先给出一幅UML类图,此图来源于<大话设计模式 ...

  9. python3中最新百度首页弹窗的登录方法

    from selenium import webdriverimport timedriver = webdriver.Ie()driver.get("http://www.baidu.co ...

  10. redis 做默认缓存

    配置: server.port= # REDIS (RedisProperties) # Redis\u6570\u636E\u5E93\u7D22\u5F15\uFF08\u9ED8\u8BA4\u ...