Unity Application Block 1.0系列(3):属性/设值方法注入(Property/Setter Inj

什么情况下使用Property (Setter) Injection

当实例化父对象时也能自动实例化所依赖的对象

通过简单的方式使得很容易做到在代码中查看每个类所依赖的项

父对象有很多相互之间有关联关系的构造器,导致在调试和维护时很不方便。

父对象包含有很多参数构造器,特别是参数类型相似的只能通过参数的位置来辨别的

让用户(将调用这些代码的程序)更方便的看到有哪些对象可以用,这在Constructor Injection里是没办法实现的。

通过修改依赖对象的代码来控制哪些对象可以被注入,而不用改动父对象或应用程序

准备工作

//歌曲类
public class Song
{
  //歌手
  public string Singer
  {
    get
    {
      return "Westlife";
    }
  }

  //歌曲名
  public string Name
  {
    get
    {
      return "My Love";
    }
  }
}

public abstract class Player
{
  [Dependency]
  public Song Song { get; set; }

  public abstract string Name { get; }

  public void Play()
  {
    Console.WriteLine(string.Format("{0}: Now Playing [{1}] Singing by ({2})", this.Name, this.Song.Name, this.Song.Singer));
  }
}

public class Mp3Player : Player
{
  public override string Name
  {
    get
    {
      return "Mp3 Player";
    }
  }
}

public class CDPlayer : Player
{
  public override string Name
  {
    get
    {
      return "CD Player";
    }
  }
}

时间: 2024-09-15 08:38:30

Unity Application Block 1.0系列(3):属性/设值方法注入(Property/Setter Inj的相关文章

Unity Application Block 1.0系列(1):快速开始

Unity Application Block (Unity) 是微软 Patterns & Practices 团队开发的一个轻量级.可扩展的依赖注入容器,有助于构建松散耦合的系统.它支持构造子注入 (Constructor Injection) , 属性/设值方法注入 (Property/Setter Injection) 和方法调用注入 (Method Call Injection) .Patterns & Practices 团队于前些天(4月4日)发布了Unity的第一个正式版本

Unity Application Block 1.0系列(7):Lifetime Managers

Unity使用继承于 LifetimeManager 基类的类去控制怎样存放到对象实例的引用和容器怎样销毁这些实例,也就是说Unity基于具体的Lifetime Manager 类去管理对象的创建和销毁. 目前Unity中提供两个Lifetime Manager类可供我们直接使用,当然你也可以实现自己的Lifetime Manager类. 1. ContainerControlledLifetimeManager Unity保存一个指向对象实例的引用.通过Unity容器为同一个类型或对象获取对象

Unity Application Block 1.0系列(6):杜绝循环引用

在介绍 Constructor Injection.Property Injection和 Method Call Injection时,都有特别提到不要出现循环引用(Circular References),因为出现这种问题后很难去检测到.最好的解决方法是写代码时候尽量避免出现这种情况. 下面看看循环引用的几个场景,在使用依赖注入框架时应该尽量避免出现这样的情况: 1.通过Constructor Injection生成的对象在构造器的参数中互相引用 public class Class1{ p

Unity Application Block 1.0系列(5): 使用BuildUp让已存在对象实例也支持依

通过Unity容器的BuildUp方法可以让已存在的对象实例也可以支持依赖注入. 准备工作 先看一些类,下面会用到: public class Owner{ public string Name { get { return "Inrie"; } } public int Age { get { return 24; } }}public abstract class Player{ public abstract void Play(); public abstract string

Unity Application Block 1.0系列(4):方法调用注入(Method Call Injection)

什么情况下使用Method CallInjection 当实例化父对象时也能自动实例化所依赖的对象 通过简单的方式使得很容易做到在代码中查看每个类所依赖的项 父对象有很多相互之间有关联关系的构造器,导致在调试和维护时很不方便 父对象包含有很多参数构造器,特别是参数类型相似的只能通过参数的位置来辨别的 隐藏依赖的对象,不作为属性暴露出去 通过修改依赖对象的代码来控制哪些对象可以被注入,而不用改动父对象或应用程序 准备工作 public interface IPlayer { void Play()

Unity Application Block 1.0系列(2):构造子注入(Constructor Injection)

什么情况下使用Constructor Injection 当实例化父对象时也能自动实例化所依赖的对象 通过简单的方式使得很容易做到在代码中查看每个类所依赖的项 父对象的构造器不需要很多相互间有关联关系的构造器 父对象的构造器不需要很多参数 通过不使用属性和方法暴露给调用程序,达到封装字段值以不能被看到的目的 通过修改依赖对象的代码来控制哪些对象可以被注入,而不用改动父对象或应用程序 准备工作 public class Song { public string Singer { get { ret

Unity Application Block 1.2 学习笔记

昨天花了一天时间,把IOC/DI的相关文章以及Unity相关的一些文章基本在园子里搜了个遍 先给出几篇不错的文章链接: Unity Application Block官方网址 http://www.codeplex.com/unity 吕震宇整理的[Object Builder Application Block] http://www.cnblogs.com/zhenyulu/articles/641728.html 吕震宇[你真的了解Ioc与AOP吗?] http://www.cnblogs

自定义Unity 容器的扩展 --- Unity Application Block Event Broker

Unity快速入门的例子中有一个Block Event Broker通过对容器功能的扩展来实现事件截获,其中扩展的代码在项目EventBrokerExtension.该项目允许在应用程序种使用自定义的容器扩展来发布和订阅事件. 自定义Unity 容器扩展是一个从 UnityContainerExtension 基类继承而来并且实现了一些额外的方法的自定义类型.该扩展可以访问容器,并且可以接收到容器中已经注册的事件. SimpleEventBrokerExtension 类继承 UnityCont

使用Unity Application Block(三):理解和使用依赖注入的键

在使用 Unity 创建对象之前,需要准备 Unity 容器,也即进行注册(类型映射).在 使用Unity(二):配置 Unity .读取配置信息和获取对象中, 我们学习了如何使用配置文件来进行注册,而在本文中,我们将学习使用代码来进行各种注册,这些代码所实现的功能同样可以使用配置文件来实现. 因为 Unity 自带的文档已在这方面进行了详细说明,所以在此仅对该文档进行了翻译,以下是译文. Unity 应用程序块容器用键以及可选的名称来标识注册(类型映射).键是接口一个接口或者一个类(通常是基类