Wiki Markup |
---|
{scrollbar} |
Overriding Tapestry IoC Services
...
In this case, it is very easy to supply your own alternate implementation of a service, by contributing a Service Override in your module class (usually AppModule.java), like this:
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
@Contribute(ServiceOverride.class) public static void setupApplicationServiceOverrides(MappedConfiguration<Class,Object> configuration) { configuration.addInstance(SomeServiceType.class, SomeServiceTypeOverrideImpl.class); } |
...
Sometimes you'll want to define the override as a service of its own. This is useful if you want to inject a Logger specific to the service, or if the overriding implementation needs a service configuration:
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
public static void bind(ServiceBinder binder) { binder.bind(SomeServiceType.class, SomeServiceTypeOverrideImpl.class).withId("SomeServiceTypeOverride"); } @Contribute(ServiceOverride.class) public static void setupApplicationServiceOverrides(MappedConfiguration<Class,Object> configuration, @Local SomeServiceType override) { configuration.add(SomeServiceType.class, override); } |
...
Alternately, this approach is useful to override a service that is matched using marker annotations.
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
public SomeServiceType decorateSomeServiceType(final SomeServiceType delegate) { return new SomeServiceType() { . . . }; } |
...
Note that the object passed in as delegate
may be the core service implementation, or it may be some other interceptor from some other decorator for the same service.
...
Wiki Markup |
---|
{scrollbar} |