例如它里面的对象的生命周期被配置了为"prototype"的时候

时间:2021-10-10 07:36:43

一、简介:

  Elite Container是DELPHI下的一个轻量级IoC东西容器(IoC:Inverse of Control,反转控制)。它是参考了Java中的Spring框架(主要是配置文件的写法),并结合DELPHI的特点来构建的。对比Spring的东西容器,它供给的成果更为精简常用(如东西延迟创建、东西属性自动注入等),降低了学习的难度,并且供给了很多扩展点,你只需简单地写一个插件实现类,并在配置文件中进行简单配置,就可以让Elite Container拥有你的自界说成果!

  Elite Container主要拥有以下的一些特性:
  
  1、无论使用或不使用BPL,都可以用Elite Container来构建你的措施(但不建议用纯DLL,因为各DLL中,同一个类的类型信息是差此外,不熟悉相关常识的话,,有可能会带来一些问题,而这自己并不是Elite Container的问题)
  2、撑持多种属性注入类型,如直接值、枚举、调集、StringList、ObjectList等。此中StringList这种注入方法,在解决键值对配置时非常有用,详细请参看相关例子
  3、撑持结构函数注入。但由于Delphi的元信息不够完备,有时需要写一个结构函数挪用类(写法很简单),才可让容器正确挪用该类和其子类的结构函数,详细请看相关例子此外由于结构函数注入有可能会引起循环注入的问题,因此建议尽量使用属性注入来表达东西的依赖关系,不得已的时候才使用结构函数注入
  4、撑持东西配置的担任。省去配置子东西时,又要把父东西的属性配置从头拷贝一遍,既麻烦又难维护。
  5、撑持东西属性的自动注入。如果你的属性定名满足必然法则,便可以操作自动注入来省去大量的配置书写
  6、撑持配置文件的引入,提高配置文件的可重用性
  7、撑持多种东西的生命周期配置(对付无状态的打点类,如逻辑层,单例生命周期是最常用的)
  8、撑持东西的别号配置
  9、增强的东西注册机制,可注册非TPersistent为基类的类(常见的如TInterfacedObject),并且容器可以区分差别单元的同名类
  10、兼容使用Delphi的RegisterClass来注册类的遗留模块
  11、大量的自界说插件扩展点。你可以自界说本身的属性注入配置方法、结构函数注入配置方法、东西配置引入方法、东西生命周期打点方法、东西属性自动注入方法等
  12、撑持东西的延迟创建。以免容器初始化时,会自动实例化一些需要花费大量时间来创建,而又很少用的类。
  13、大量的可编程接口。你甚至可以本身写一个用INI、或数据库来进行配置的IoC容器!

  借助Elite Container和Ioc思想,你可以更等闲地构建出具有松散耦合、重费用高的应用措施。它的核心思想就是拆分成果的接口和实现,上层只依赖于下层的接口,然后通过Elite Container的配置,把差此外实现类注入到该接口中,到达改换成果,也就是复用已有代码的目的。设计人员可以真正地阐扬好本身的面向东西思想和相关设计模式,来架构企业级的应用措施,而无需象以前那样,在Delphi顶用起面向东西总有点捉襟见袖的觉得。

  DEMO下载地点:

二、使用Elite Container的范例开发法式:

  1、新建项目,在项目选项中选择“build with runtime packages”,去失所有的默认包,然后选择EliteContainerD7
  2、成立应用措施的范围(如东西实体、逻辑措置惩罚惩罚、接口处事等)
  3、用XML文件来配置这些东西
  4、引用elXMLConfigurateContainer单元,声明一个IelObjectContainer类型的接口变量
  5、给这个接口创建一个TelXMLConfigurateContainer的实例,把这个XML文件的路径(相对或绝对路径均可,结构函数有参数指定),作为参数传入到结构函数中
  6、TelXMLConfigurateContainer创建的时候,会自动初始化生命周期配置为"singleton",并且不是延迟创建的东西
  7、此刻可以按照配置文件所配置的东西ID或别号,从容器中获取已配置好的东西或接口了
  8、挪用所获取的东西或接口,来完成措施的成果

三、DEMO目录说明:

  Bin 各个例子的可执行措施
  Bin\Config 各个例子所用到的配置文件
  Lib 各个例子用到的dcp文件,需要在项目设置的"Build with runtime packages"中引入
  Source 各个例子的源代码。共26个例子,用于详细介绍Elite Container的特性。请务必结合源代码、配置文件和可执行文件来理解,这样才华到达演示的目的。如果要编译例子源代码的话,请把Lib目录添加到Delphi的Library Path下,并改削下项目的输出路径。