DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: sharehb
今日帖子: 23
在线用户: 19
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 xinjian214 (xinjian214) ★☆☆☆☆ -
普通会员
2013/7/15 17:55:49
标题:
求教,这是什么语法? 浏览:2012
加入我的收藏
楼主: TPetNoiseProvider = class(TInterfacedObject, IPetNoiseMaker)
private
  [Inject('Dog')]
  FPet: IMakeNoise;
public
  procedure MakePetNoises; overload;
  procedure MakePetNoises(aAnimalName: string); overload;
end;

这里的 [Inject('Dog')] 是个啥,有人能解答下吗?

http://delphi-spring-framework.googlecode.com/svn/trunk/Samples/SpringDemos/Demo.DependencyInjection/uSimpleInjection.pas
----------------------------------------------
-
作者:
男 zuobaoquan (zuobaoquan) ★☆☆☆☆ -
普通会员
2013/7/16 0:06:52
1楼: Delphi2010开始支持反射(Enhanced RTTI)和自定义特性(Attribute),在一些场景中可以简化代码,比如ORM(对象关系映射),Configuration,Dependency Injection(依赖注入)等等。

比如现在有一个ORM框架,它定义了几个特性类:EntityAttribute, TableAttribute, ColumnAttribute (它们都是System.TCustomAttribute的子类,Attribute后缀可以省略)。示例:

[Entity]  // 表示这是一个实体对象
[Table('Persons')] // 表示TPerson实例对应的数据库表名
TPerson = class
private
  [Column('Name')] // 对应的字段名
  fName: string;
  [Column('BirthDate')]
  fBirthDate: TDate;
end;
这样就很方便定义了业务类TPerson和数据库的映射方式,而ORM框架则可以通过反射机制或的这些信息并生成对应的SQL语句,创建、读取、修改和删除业务对象了。

回到你的问题,Inject实际上是InjectAttribute,它是告诉Spring4D的依赖注入容器当前所需要的IMakeNoise服务的实例名称("Dog")。

其他就不展开了。。
----------------------------------------------
作者:
男 kenliaoliao (ben) ★☆☆☆☆ -
普通会员
2013/7/16 7:56:26
2楼: 看来我也要好好补习下反射等新内容了!
----------------------------------------------
-
作者:
男 xinjian214 (xinjian214) ★☆☆☆☆ -
普通会员
2013/7/16 10:03:28
3楼: 竟然得到左宝权大大的亲自解答,非常感谢。
原来tintinsoft的博客里有详细介绍过,之前没细看,连关键字都找不对。
传送门:http://hi.baidu.com/tintinsoft/item/e37440f4b910074c922af269
----------------------------------------------
-
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行58.59375毫秒 RSS