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 框架的核心基于控制反转原理. 什么是控制反转?控制反转是一种将组件依赖关系的创建和管理置于程序外部的技 ...
随机推荐
- GIT命令行笔记
一次常规的初始化+推送: git initgit config user.email "you@example.com"git config user.name "asm ...
- xinetd网络
简单Web服务器 基本的HTTP协议 请求服务器数据 GET /文件或目录 HTTP/1.1 协议头部分(可选) /r/n(协议头结束) 服务器应答浏览器 HTTP/1.1 200 OK conten ...
- MAC 无脑编译OpenCV
1:准备好OpenCV 源码包 下载地址:https://opencv.org/releases.html 编译教程:https://blog.csdn.net/computerme/article/ ...
- Echarts动态加载柱状图的实例
一.引入echarts.js文件(下载页:http://echarts.baidu.com/download.html) 二.HTML代码: <div style="width: 10 ...
- CF 966E May Holidays
/* 考虑对于询问分块, 每根号n个询问做一次 考虑一次询问, 我们建立出虚树来每条链上的更改一定是一样的, 然后会有根号条链 对于每条链上的点按照w基数排序并且合并相同, 然后每次更改 就是一个指针 ...
- [UGUI]图文混排(四):插入图片
参考链接: http://www.cnblogs.com/leoin2012/p/7162099.html 0.图片标签和图片类 标签格式:<icon name=*** w=1 h=1 n=** ...
- sql server ldf 日志文件清理
- abc高级bash shell编程
http://www.pythoner.com/122.html abc高级bash shell编程
- 8. Object转Map,Map转Object
法一:使用reflect进行转换 public static Object mapToObject(Map<String, Object> map, Class<?> bean ...
- Flex学习笔记-皮肤
1文件结构 MXML应用程序 index.mxml 皮肤文件 components.button.skin.btnSkin1.mxml 皮肤文件的组件随便引用了spark.components.Bu ...