1. 构造子注入
1.1 构造子注入初级代码
container.RegisterType<IMyWork, MyWork>(new InjectionConstructor(new Book("Mybook"))
1.2 在子构造子注入时增加unity依赖注入
public class MyWork : IMyWork
{
public Book mybook;
public MyWork(Book mybook)
{
this.mybook = mybook;
}
public string Work()
{
return "Work!";
}
public Book GetBook()
{
return this.mybook;
}
}
public interface IMyWork
{
string Work();
Book GetBook();
}
2. 注册泛型
2.1 注册泛型的方式一
//方式一
container.RegisterType(
typeof(IMessageQueue<>),
typeof(MessageQueue<>),
new InjectionConstructor(storageAccountType,retryPolicyFactoryType, typeof(string))
);
2.2 注册泛型的方式二
//方式二
cntainer.RegisterType<IBlobContainer<SurveyAnswer>,EntitiesBlobContainer<SurveyAnswer>>(
new InjectionConstructor(storageAccountType, retryPolicyFactoryType, typeof(string))
);
3. 延迟加载
// Register the type
container.RegisterType<MySampleObject>(new InjectionConstructor("default"));
// Resolve using Lazy<T>
var defaultLazy = container.Resolve<Lazy<MySampleObject>>();
// Use the resolved object
var mySampleObject = defaultLazy.Value
4. 单例
通常情况下实现单例模式,在类中定义一个方法如Instance返回实例,但是这样有一种情况每一个类都要创建代码重复量多,同时将对象的生命周期与类本身职责耦合在一起。
下面是将生命周期职责移动到Unity上。
//方式一 通过ContainerControlledLifetimeManager创建单例
container.RegisterType<IMyWork, MyWork>(new ContainerControlledLifetimeManager());
//方式二 通过RegisterInstance创建单例
container.RegisterInstance<IMyWork>(new MyWork());
然后我们通过Resolve再次获取对象是就是一个上次创建的对象。
5. 延迟加载加单例
// Register the type with a lifetime manager
container.RegisterType<MySampleObject>("other", new ContainerControlledLifetimeManager(), new InjectionConstructor("other"));
// Resolve the lazy type
var defaultLazy1 = container.Resolve<Lazy<MySampleObject>>("other");
// Resolve the lazy type a second time
var defaultLazy2 = container.Resolve<Lazy<MySampleObject>>("other");
// defaultLazy1 == defaultLazy2 is false
// defaultLazy1.Value == defaultLazy2.Value is true
这是本人学习Unity的记录
Unity 依赖注入之二的更多相关文章
-
WPF PRISM开发入门二(Unity依赖注入容器使用)
这篇博客将通过一个控制台程序简单了解下PRISM下Unity依赖注入容器的使用.我已经创建了一个例子,通过一个控制台程序进行加减乘除运算,项目当中将输入输出等都用接口封装后,结构如下: 当前代码可以点 ...
-
Unity依赖注入使用详解
写在前面 构造器注入 Dependency属性注入 InjectionMethod方法注入 非泛型注入 标识键 ContainerControlledLifetimeManager单例 Unity注册 ...
-
C# Unity依赖注入
简介: 控制反转:我们向IOC容器发出获取一个对象实例的一个请求,IOC容器便把这个对象实例“注入”到我们的手中,在这个过程中你不是一个控制者而是一个请求者,依赖于容器提供给你的资源,控制权落到了容器 ...
-
使用Microsoft.Practices.Unity 依赖注入
Unity是微软Patterns & Practices团队所开发的一个轻量级的,并且可扩展的依赖注入(Dependency Injection)容器,它支持常用的三种依赖注入方式:构造器注入 ...
-
使用Microsoft.Practices.Unity 依赖注入 转载https://www.cnblogs.com/slardar1978/p/4205394.html
Unity是微软Patterns & Practices团队所开发的一个轻量级的,并且可扩展的依赖注入(Dependency Injection)容器,它支持常用的三种依赖注入方式:构造器注入 ...
-
Unity 依赖注入
关于Ioc的框架有很多,比如astle Windsor.Unity.Spring.NET.StructureMap,我们这边使用微软提供的Unity做示例,你可以使用Nuget添加Unity,也可以引 ...
-
c# Unity依赖注入WebService
1.IOC与DI简介 IOC全称是Inversion Of Control(控制反转),不是一种技术,只是一种思想,一个重要的面相对象编程的法则,它能知道我们如何设计出松耦合,更优良的程序.传统应用程 ...
-
Unity依赖注入
一.简介 Unity是一个轻量级的可扩展的依赖注入容器,支持构造函数,属性和方法调用注入.Unity可以处理那些从事基于组件的软件工程的开发人员所面对的问题.构建一个成功应用程序的关键是实现非常松散的 ...
-
Unity依赖注入(笔记)
一.介绍 控制反转(Inversion of Control,简称IoC):整洁架构思想,不允许内部获知外部的存在,这就导致了我们必须在内层定义与外层交互的接口,通过依赖注入的方式将外层实现注入到内部 ...
随机推荐
-
敏捷软件开发vs传统软件开发
摘要 本文介绍了传统软件开发(着重介绍了传统软件开发中常用的瀑布模型)和敏捷软件开发,以及敏捷开发和传统开发的对比. 一.传统软件开发 比较常用的几种传统软件开发方法:瀑布式开发.迭代式开发.螺旋开发 ...
-
MongoDB -- 更新
$pull: db.collection.update( <query>, { $pull: { <arrayField>: <query2> } } ) $pul ...
-
javascript第一篇----使用简介
使用技巧 Javascript加入网页有两种方法:直接方式和引用方式. 直接方式 直接调用分为两种形式:代码块和代码行 代码行引用: <a href="javascript:alert ...
-
MySql 学习之路-聚合函数
下面是mysql 数据库中经常用到的聚合函数的简单实例 -- 创建学生表 create table student ( id int primary key auto_increment commen ...
-
tomcat安装启动之后localhost:8080页面进不去,提示错误500
具体的错误展示页面如下: 首先,需要考虑到是不是安装的tomcat版本和自己安装的jdk的版本一致,如果不一致,建议将tomcat换成和jdk一致或者高于jdk版本的tomcat版本.(比如安装的jd ...
-
[P1005][NOIP2007] 矩阵取数游戏 (DP+高精)
我不会高精…… 也不会DP…… 这道题即考高精又考DP…… 我要死了 给一个不是高精的代码(当然不能满分) #include<cstdio> #include<iostream> ...
-
Qt sprintf_s函数格式化字符串出错
Qt sprintf_s函数格式化字符串出错 问题的出现: 我在VS上用c C++写的跨平台的函数 移植到Qt 上面 出现sprintf_s 函数格式化出错. 开始以为是编码问题 反复查找Qt乱码问 ...
-
javascript深入浅出
第一章 数据类型 1,六种数据类型:原始类型(number,string,boolean,null,undefined) + object对象(Function Array Date) 2,隐式转换: ...
-
MyBatis 学习记录2 Mapper对象是如何生成的
主题 以前我一直有一个问题不懂.并且觉得很神奇.就是Mybatis我们开发的时候只需要定义接口,并没有写实现类,为什么我们运行的时候就可以直接使用? 现在我想分享下这部分大致是怎么实现的. 在启动的时 ...
-
ffmpeg综合应用示例(一)——摄像头直播
本文的示例将实现:读取PC摄像头视频数据并以RTMP协议发送为直播流.示例包含了 1.ffmpeg的libavdevice的使用 2.视频解码.编码.推流的基本流程 具有较强的综合性. 要使用liba ...