unity 三种注入示例
/*
* 演示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 三种注入示例的更多相关文章
- .NetCore中三种注入方式的思考
该篇内容由个人博客点击跳转同步更新!转载请注明出处! .NetCore彻底诠释了"万物皆可注入"这句话的含义,在.NetCore中到处可见注入的使用.因此core中也提供了三种注入 ...
- spring ioc三种注入方式
spring ioc三种注入方式 IOC ,全称 (Inverse Of Control) ,中文意思为:控制反转 什么是控制反转? 控制反转是一种将组件依赖关系的创建和管理置于程序外部的技术. 由容 ...
- Spring IOC 三种注入方式
1. 接口注入 2. setter注入 3. 构造器注入 对象与对象之间的关系可以简单的理解为对象之间的依赖关系:A类需要B类的一个实例来进行某些操作,比如在A类的方法中需要调用B类 ...
- Spring IOC以及三种注入方式
IOC是spring的最基础部分,也是核心模块,Spring的其他组件模块和应用开发都是以它为基础的.IOC把spring的面向接口编程和松耦合的思想体现的淋漓尽致. IOC概念 IOC(Invers ...
- Spring的三种注入方式(Setter、构造函数和自动注入)
一.Setter注入 这里我是希望在Student.java中调用Course.java中的内容. public class Course { public String name = "数 ...
- Spring IOC 中三种注入方式
项目错误知识点记录 正文 最近在项目的时候,用到Spring框架,Spring框架提供了一种IOC的自动注入功能,可以很轻松的帮助我们创建一个Bean,这样就省的我们四处写new Object()这样 ...
- Spring IOC 三种注入方式(构造器,setter,接口)
Spring的依赖注入有三种方式: 1,构造器注入 2,setter注入 3,接口注入 下面我给大家介绍一下这三种注入 1.构造器注入 构造器注入主要是依赖于构造方法去实现,构造方法可以是有参也可以是 ...
- Spring学习日记01_IOC_xml的三种注入方式
什么是IOC 控制反转,把对象创建和对象之间的调用过程,交给Spring进行管理 使用IOC目的:为了耦合度降低 做入门案例就是IOC实现 IOC底层原理 xml解析 工厂模式 反射 原始方式 cla ...
- Spring IOC三种注入方式(接口注入、setter注入、构造器注入)(摘抄)
IOC ,全称 (Inverse Of Control) ,中文意思为:控制反转, Spring 框架的核心基于控制反转原理. 什么是控制反转?控制反转是一种将组件依赖关系的创建和管理置于程序外部的技 ...
随机推荐
- 【LeetCode】4. 寻找两个有序数组的中位数
给定两个大小为 m 和 n 的有序数组 nums1 和 nums2. 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n)). 你可以假设 nums1 和 nums2 ...
- Android Studio连接不到MuMu模拟器;
网易推出的mumu模拟器还挺好用的,主要是流畅占内存小: 但是安装mumu模拟器后,as连接不到mumu模拟器: 好了,教程来了:两步走: 先把模拟器运行起来! 第一步:打开Terminal,输入: ...
- Windows NAT端口映射
由于有需求进行端口映射,又不想装乱七八糟的软件,Windows本身自带的路由远程访问配置太麻烦,还要两块网卡,坑爹啊. 其实Windows本身命令行支持配置端口映射,条件是已经安装了IPV6,启不启用 ...
- .NET C#获取当前网页地址
摘自:https://www.cnblogs.com/vichin/p/6004249.html 设当前页完整地址是:http://www.jb51.net/aaa/bbb.aspx?id=5& ...
- ES6学习笔记<五> Module的操作——import、export、as
import export 这两个家伙对应的就是es6自己的 module功能. 我们之前写的Javascript一直都没有模块化的体系,无法将一个庞大的js工程拆分成一个个功能相对独立但相互依赖的小 ...
- 《机器学习实战》ID3算法实现
注释:之前从未接触过决策树,直接上手对着书看源码,有点难,确实有点难-- 本代码是基于ID3编写,之后的ID4.5和CART等还没学习到 一.决策树的原理 没有看网上原理,直接看源码懂得原理,下面是我 ...
- linux系统 python升级创建虚拟环境
Python3.3以上的版本通过venv模块原生支持虚拟环境,可以代替之前的virtualenv. 该venv模块提供了创建轻量级“虚拟环境”,提供与系统Python的隔离支持.每一个虚拟环境都有其自 ...
- 推荐算法 pd
from django.db import connection select_sql = 'select * from model' datas = pd.read_sql(select_sql, ...
- [UnityShader基础]02.深度测试 & 深度写入
参考链接: https://blog.csdn.net/v_xchen_v/article/details/79380222 前面说到了渲染队列,对于两个不透明的物体A和B,它们处于同一个渲染队列中. ...
- Ruby学习笔记5: 动态web app的建立 (2)
上一节里,我们搭建了一个数据库的结构,并用index验证了request-response cycle,如下图: 1. Add show method into Controller 这一节,我们要继 ...