unity的依赖注入

参考文档

http://www.cnblogs.com/zhangchenliang/archive/2013/01/08/2850970.html

http://www.tuicool.com/articles/yiUzQj

IUnityContainer container = new UnityContainer();#region 1.0 注册类型container.RegisterType<IKiss, Boy>();var boy = container.Resolve<IKiss>();Girl gril = new Girl(boy);          #endregion#region 2.0 注册实例Boy boy2 = new Boy();container.RegisterInstance<IKiss>(boy2);var boy3 = container.Resolve<IKiss>();Girl gril1 = new Girl(boy3);          #endregion#region 3.0 单例模式/*boy4和boy5的属性dt相同,* 可以证明是单例*/container.RegisterType<IKiss, Boy>(new ContainerControlledLifetimeManager());var boy4 = container.Resolve<IKiss>();var boy5 = container.Resolve<IKiss>(); #endregion#region 4.0 配置文档配置注册和解析IUnityContainer container1 = new UnityContainer();UnityConfigurationSection configuration = ConfigurationManager.GetSection(UnityConfigurationSection.SectionName)as UnityConfigurationSection;configuration.Configure(container1, "defaultContainer");var boy6 = container1.Resolve<IKiss>(); #endregion#region 5.0 带名称的注册和解析container.RegisterType<IKiss, Boy>("boy");container.RegisterType<IKiss, Boy1>("boy1");var boy7 = container.Resolve<IKiss>("boy1"); var list=container.ResolveAll<IKiss>();#endregion
 public interface IKiss{void Kiss();}public class Girl {public IKiss boy;public Girl(IKiss boy){ this.boy = boy; }public void Kiss(){this.boy.Kiss();Console.WriteLine("girl is kissing");}}public class Boy : IKiss{public Boy(){this.dt = DateTime.Now;}public DateTime dt { get; set; }public void Kiss(){Console.WriteLine("boy is kissing");}}public class Boy1 : IKiss{public Boy1(){this.dt = DateTime.Now;}public DateTime dt { get; set; }public void Kiss(){Console.WriteLine("boy1 is kissing");}}
<configuration><configSections><section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection,Microsoft.Practices.Unity.Configuration"/></configSections><startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /></startup><unity><containers><container name="defaultContainer"><register type="DI.IKiss,DI" mapTo="DI.Boy,DI"/></container></containers></unity>
</configuration>

四种注入方式

 public interface IPeople { void Live();}public interface IEat { void Eat();}public interface ISleep { void Sleep(); }public interface IPlay { void Play();}public class PlayBoy : IPeople{//构造函数注入public IEat PEat { get; set; }//属性注入
        [Dependency]public ISleep PSleep { get; set; }public IPlay PPlay { get; set; }public PlayBoy(IEat eat){ this.PEat = eat; }[InjectionMethod]public void Initialize(IPlay play){ this.PPlay = play; }public void Live(){this.PEat.Eat();this.PSleep.Sleep();this.PPlay.Play();Console.WriteLine("playboy is walking");}}public class BoyEat : IEat{public void Eat(){Console.WriteLine("eat rice and meat");}}public class BoySleep : ISleep{public void Sleep(){Console.WriteLine("sleep at 12:00 and wake up at 8:00");}}public class BoyPlay : IPlay{public void Play(){Console.WriteLine("play war3 and dota");}}

注册和解析

  IUnityContainer container = new UnityContainer();container.RegisterType<IPeople, PlayBoy>();container.RegisterType<IEat, BoyEat>();container.RegisterType<ISleep, BoySleep>();container.RegisterType<IPlay, BoyPlay>();var p = container.Resolve<IPeople>();p.Live();

 

转载于:https://www.cnblogs.com/tgdjw/p/4680343.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/290764.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ios 贝塞尔动画

CGPoint fromPoint self.imageView.center; //路径曲线 UIBezierPath *movePath [UIBezierPath bezierPath]; [movePath moveToPoint:fromPoint]; CGPoint toPoint CGPointMake(300, 460); [movePath addQuadCurveToPoint:toPoint c…

SAP中查询用户操作日志的事务码

事务码&#xff1a;STAD 注意&#xff1a;查询的时间跨度范围不要太大&#xff0c;否则会很慢&#xff01; 事务码&#xff1a;ST03N 工作负载和性能统计转载于:https://www.cnblogs.com/ruingy/p/3955340.html

C/C++之常用字符串比较总结

1、std::string比较 我们一般用str1.compare(str2) 0来实现 2、const char* 的比较 我们一般用strcmp(p1, p2) 0来实现 3、代码 4、结果 str1 str4 str5 is null p1 p3

【C#/.NET】控制台上动态构建中间件管道

如上图所示&#xff1a;我们将会在下面文章上一步一步变形实现出这样的功能。一、傻瓜式执行演示首先建立控制台项目&#xff0c;创建Begin() FirstMiddleware() SecondMiddleware() End() 三个函数1 /// <summary>2 /// 开始执行前3 /// </summ…

SON Web Token设计单点登录系统

2019独角兽企业重金招聘Python工程师标准>>> 上次在《JSON Web Token - 在Web应用间安全地传递信息》中我提到了JSON Web Token可以用来设计单点登录系统。我尝试用八幅漫画先让大家理解如何设计正常的用户认证系统&#xff0c;然后再延伸到单点登录系统。 如果还没…

00001centos6.3安装

使用的环境centos6.3vm9putty or xshell4xshell4 乱码问题http://blog.itpub.net/26230597/viewspace-1146248/后盾网李波老师的PPT非常给力可惜没找到转载于:https://blog.51cto.com/panzhengming/1548791

Android之获取指定目录下的所有特殊文件名字

1、获取指定目录下的所有特殊文件名字 比如我们在sdcard目录下的chenyu这个文件夹里面获取以so文件结尾的所有文件名 2、代码 public ArrayList<String> getFileName(String fileAbsolutePaht, String type) {ArrayList<String> result new ArrayList<String&…

笔记(2015-07-24)

STL方面的笔记 以下为vector queue map set stack的基本用法 可编译结合注释查看 1 #include <vector>2 #include <iostream>3 #include <queue>4 #include <map>5 #include <set>6 #include <stack>7 using namespace std;8 9 #define RE…

Avalonia跨平台入门第十篇之控件的锁定

在前面分享的几篇中咱已经玩耍了Popup、ListBox多选、Grid动态分、RadioButton模板、控件的拖放效果、控件的置顶和置底;今天趁着有时间接着对拖放到Canvas上的控件进行锁定的效果,最终实现的效果如下图:关于控件的锁定实现代码:接下来的文章中我会分享控件在Canvas范围内拖拽和…

开放一些常见功能的工具类代码

public static class CommonUtil{/// <summary>/// 显示表单/// </summary>/// <param name"view"></param>/// <param name"panelKey"></param>/// <returns></returns>public static void ShowForm(thi…

ios之第一个图形化界面

1、创建ios项目 1、create Xcode ->simpleViewApplication -> input Program name 2、在控制器里面加入代码 我们在viewControl.m里面加上UILabel控件&#xff0c;这个控件和Android 里面的TextView类似&#xff0c;具体代码如下// // ViewController.m // SecondHello…

Memcached简介

在Web服务开发中&#xff0c;服务端缓存是服务实现中所常常采用的一种提高服务性能的方法。其通过记录某部分计算结果来尝试避免再次执行得到该结果所需要的复杂计算&#xff0c;从而提高了服务的运行效率。 除了能够提高服务的运行效率之外&#xff0c;服务端缓存还常常用来提…

JAVA设计模式之门面模式(外观模式)

医院的例子 现代的软件系统都是比较复杂的&#xff0c;设计师处理复杂系统的一个常见方法便是将其“分而治之”&#xff0c;把一个系统划分为几个较小的子系统。如果把医院作为一个子系统&#xff0c;按照部门职能&#xff0c;这个系统可以划分为挂号、门诊、划价、化验、收费、…

里程碑 .Net7再更新,从此彻底碾压Java!

.NET 7 Preview1发布了&#xff0c;没时间实操&#xff1f;先快来看看.NET7的七项重大改进&#xff01;1、不再支持.NET 7应用程序、运行时和SDK的多级查找&#xff08;MLL&#xff09;2、PATH停止向.NET 7运行时和SDK添加32位.NET3、默认情况下&#xff0c; dotnet build/publ…

软件架构知识体系

2019独角兽企业重金招聘Python工程师标准>>> 由于[GOF95]是论述软件模式的著作的第一本&#xff0c;也是OO设计理论著作中最流行的一本&#xff0c;因此有些人常常使用设计模式&#xff08;Design Pattern&#xff09;一词来指所有直接处理软件的架构、设计、程序实…

C语言之最好理解的通过函数指针作为参数实现回调函数

1、函数指针回调解释 回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数 2、代码实现 #include <stdio.h>int sub(int a, int b);int sub1(int a, int b, in…

asp.net 的page 基类页面 做一些判断 可以定义一个基类页面 继承Page类 然后重写OnPreLoad事件...

public class BasePage:Page protected override void OnPreLoad(EventArgs e){ base.OnPreLoad(e); .................. } 这样 就可以在基类页面 统一做一些判断了 转载于:https://www.cnblogs.com/maijin/p/4681871.html

C#不要再使用Npoi啦,使用MiniExcel操作Excel文件更快更高效!

1.简介MiniExcel简单、高效避免OOM的.NET处理Excel查、写、填充数据工具。目前主流框架如Npoi 需要将数据全载入到内存方便操作&#xff0c;但这会导致内存消耗问题。MiniExcel 尝试以 Stream 角度写底层算法逻辑&#xff0c;能让原本1000多MB占用降低到几MB&#xff0c;避免内…

#、%和$符号在OGNL表达式中的作用

#、%和$符号在OGNL表达式中经常出现&#xff0c;而这三种符号也是开发者不容易掌握和理解的部分。在这里笔者简单介绍它们的相应用途。1&#xff0e;#符号的用途一般有三种。 1)访问非根对象属性&#xff0c;例如示例中的#session.msg表达式&#xff0c;由于Struts 2中值栈被…

Android之获取证书文件(pfx格式)的公钥和私钥

1、把pfx证书文件放入sdcard adb push ***.pfx /sdcard/ 2、解析获取公钥和私钥 //证书解析 String path = Environment.getExternalStorageDirectory().getPath() + "/sim_shield.pfx";public static Map<String, byte[]> parsePfx(String pfxPath, String…