1. 构造子注入

1.1 构造子注入初级代码

  1. container.RegisterType<IMyWork, MyWork>(new InjectionConstructor(new Book("Mybook"))

1.2 在子构造子注入时增加unity依赖注入

  1. public class MyWork : IMyWork
  2. {
  3. public Book mybook;
  4. public MyWork(Book mybook)
  5. {
  6. this.mybook = mybook;
  7. }
  8. public string Work()
  9. {
  10. return "Work!";
  11. }
  12. public Book GetBook()
  13. {
  14. return this.mybook;
  15. }
  16. }
  17. public interface IMyWork
  18. {
  19. string Work();
  20. Book GetBook();
  21. }

2. 注册泛型

2.1 注册泛型的方式一

  1. //方式一
  2. container.RegisterType(
  3. typeof(IMessageQueue<>),
  4. typeof(MessageQueue<>),
  5. new InjectionConstructor(storageAccountType,retryPolicyFactoryType, typeof(string))
  6. );

2.2 注册泛型的方式二

  1. //方式二
  2. cntainer.RegisterType<IBlobContainer<SurveyAnswer>,EntitiesBlobContainer<SurveyAnswer>>(
  3. new InjectionConstructor(storageAccountType, retryPolicyFactoryType, typeof(string))
  4. );

3. 延迟加载

  1. // Register the type
  2. container.RegisterType<MySampleObject>(new InjectionConstructor("default"));
  3. // Resolve using Lazy<T>
  4. var defaultLazy = container.Resolve<Lazy<MySampleObject>>();
  5. // Use the resolved object
  6. var mySampleObject = defaultLazy.Value

4. 单例

通常情况下实现单例模式,在类中定义一个方法如Instance返回实例,但是这样有一种情况每一个类都要创建代码重复量多,同时将对象的生命周期与类本身职责耦合在一起。

下面是将生命周期职责移动到Unity上。

  1. //方式一 通过ContainerControlledLifetimeManager创建单例
  2. container.RegisterType<IMyWork, MyWork>(new ContainerControlledLifetimeManager());
  1. //方式二 通过RegisterInstance创建单例
  2. container.RegisterInstance<IMyWork>(new MyWork());

然后我们通过Resolve再次获取对象是就是一个上次创建的对象。

5. 延迟加载加单例

  1. // Register the type with a lifetime manager
  2. container.RegisterType<MySampleObject>("other", new ContainerControlledLifetimeManager(), new InjectionConstructor("other"));
  3. // Resolve the lazy type
  4. var defaultLazy1 = container.Resolve<Lazy<MySampleObject>>("other");
  5. // Resolve the lazy type a second time
  6. var defaultLazy2 = container.Resolve<Lazy<MySampleObject>>("other");
  7. // defaultLazy1 == defaultLazy2 is false
  8. // defaultLazy1.Value == defaultLazy2.Value is true

这是本人学习Unity的记录

Unity4.0的使用

Unity 依赖注入之一

Unity 依赖注入之二的更多相关文章

  1. WPF PRISM开发入门二(Unity依赖注入容器使用)

    这篇博客将通过一个控制台程序简单了解下PRISM下Unity依赖注入容器的使用.我已经创建了一个例子,通过一个控制台程序进行加减乘除运算,项目当中将输入输出等都用接口封装后,结构如下: 当前代码可以点 ...

  2. Unity依赖注入使用详解

    写在前面 构造器注入 Dependency属性注入 InjectionMethod方法注入 非泛型注入 标识键 ContainerControlledLifetimeManager单例 Unity注册 ...

  3. C# Unity依赖注入

    简介: 控制反转:我们向IOC容器发出获取一个对象实例的一个请求,IOC容器便把这个对象实例“注入”到我们的手中,在这个过程中你不是一个控制者而是一个请求者,依赖于容器提供给你的资源,控制权落到了容器 ...

  4. 使用Microsoft.Practices.Unity 依赖注入

    Unity是微软Patterns & Practices团队所开发的一个轻量级的,并且可扩展的依赖注入(Dependency Injection)容器,它支持常用的三种依赖注入方式:构造器注入 ...

  5. 使用Microsoft.Practices.Unity 依赖注入 转载https://www.cnblogs.com/slardar1978/p/4205394.html

    Unity是微软Patterns & Practices团队所开发的一个轻量级的,并且可扩展的依赖注入(Dependency Injection)容器,它支持常用的三种依赖注入方式:构造器注入 ...

  6. Unity 依赖注入

    关于Ioc的框架有很多,比如astle Windsor.Unity.Spring.NET.StructureMap,我们这边使用微软提供的Unity做示例,你可以使用Nuget添加Unity,也可以引 ...

  7. c# Unity依赖注入WebService

    1.IOC与DI简介 IOC全称是Inversion Of Control(控制反转),不是一种技术,只是一种思想,一个重要的面相对象编程的法则,它能知道我们如何设计出松耦合,更优良的程序.传统应用程 ...

  8. Unity依赖注入

    一.简介 Unity是一个轻量级的可扩展的依赖注入容器,支持构造函数,属性和方法调用注入.Unity可以处理那些从事基于组件的软件工程的开发人员所面对的问题.构建一个成功应用程序的关键是实现非常松散的 ...

  9. Unity依赖注入(笔记)

    一.介绍 控制反转(Inversion of Control,简称IoC):整洁架构思想,不允许内部获知外部的存在,这就导致了我们必须在内层定义与外层交互的接口,通过依赖注入的方式将外层实现注入到内部 ...

随机推荐

  1. 集群CLUSTER种类介绍

    一.集群CLUSTER 介绍 计算机集群Cluster,可以把多台计算机 连接在一起使用,平分资源或互为保障.其好处不言而喻,群集中的每个计算机被称为一个节点,节点可添加可减少,在这些节点之上虚拟出一 ...

  2. JavaScript面向对象和原型函数

    对象,是javascript中非常重要的一个梗,是否能透彻的理解它直接关系到你对整个javascript体系的基础理解,说白了,javascript就是一群对象在搅..(哔!). 常用的几种对象创建模 ...

  3. SDC Tcl package of Timequest

    Tcl comand Tcl Commands all_clocks all_inputs all_outputs all_registers create_clock create_generate ...

  4. frp配置

    frps配置 --------------------------------------------------------------------------------------------- ...

  5. 3篇NeuroImage文献分析

    鉴于之前读的一些文章很容易就忘掉了,故打算花点时间记录下所读的文献. 这几天花了一些时间读了3篇文献: Intersubject consistency of cortical MEG signals ...

  6. svn 合并分支

    1.将某一主干/分支某一时段的改变,合并到工作空间副本 2.将某一主干/分支与其他主干/分支的改变,合并到工作空间副本

  7. 枚举扩展方法获取枚举Description

    枚举扩展方法 /// <summary> /// 扩展方法,获得枚举的Description /// </summary> /// <param name="v ...

  8. Ninject学习(一) - Dependency Injection By Hand

    大体上是把官网上的翻译下而已. http://www.ninject.90iogjkdcrorg/wiki.html Dependency Injection By Hand So what's Ni ...

  9. Apache 服务器搭建 总结

    安装素材准备:<1>下载jdk <2>下载apache2.0.55 <3>下载tomcat5.5 <4>下载jk(mod_jk-apache-2.0.5 ...

  10. C/C++: C++位域和内存对齐问题

    1. 位域: 1. 在C中,位域可以写成这样(注:位域的数据类型一律用无符号的,纪律性). struct bitmap { unsigned a : ; unsigned b : ; unsigned ...