本文翻译出处 http://tapestry.apache.org/tapestry5/tapestry-core/guide/appstate.html
本人翻译目的是用来学习Tapestry5的,共享出来希望大家批评指正。计划持续翻译。
chinajavawolf
导言
在很多情况里,
Tapestry
必需提供一个相配的字段域类型给可用的
IoC
服务。
如果只有一个单独的服务注册为可执行的服务,
Tapestry
将利用这个服务。
当有不只一个服务的时候,必须消除歧义确定是哪个服务被注册。为了要消除所有的歧义
(
所有注入的
)
,你必须从服务接口创建一个别名指向特殊的服务。
这里采取提供别名服务的形式。
别名服务有另外的意图:首先,他允许基于应用模式现场替换注入服务。当前,只有
”servlet”
模式,但以后将包括
"portlet"
和可能的
"offline"
模式
其次,共事的
AliasOverrides
服务配置允许现场替换特殊的服务,没有其余注册在
IoC
内的网络服务的烦扰。
贡献的别名
要为别名服务贡献一个新的服务,你必须首先确定一个逻辑名。通常,这是个被服务实现了的服务接口名。
然后你可以向基础服务贡献配置
- public static void contributeAlias(@InjectService("MyService") MyService myService,
- Configuration<aliascontribution></aliascontribution> configuration)
- {
- configuration.add(new AliasContribution.create(MyService.class, myService));
- }
上面的例子是一个典型的模式;服务被公开注入到贡献者(
contributor
)方法,使用外在的
InjectService
标注。一个贡献(
contribution
)成为提供的服务类型。
注意
contribution
不能有服务。你仅仅可以在
contribution
方法内实例化一个对象,并且贡献他。
贡献
AliasOverrides
要替换一个服务,你需要知道服务接口的名字。
随后你可以提供一个
contribution
给
AliasOverrides
服务配置,就像前面例子中描述的。
作为代理提供的对象将掩饰默认的contribution。