...
Code Block | ||||
---|---|---|---|---|
| ||||
@Contribute(ServiceOverride.class)
public static void setupApplicationServiceOverrides(MappedConfiguration<Class,Object> configuration)
{
configuration.addInstance(SomeServiceType.class, SomeServiceTypeOverrideImpl.class);
}
|
...
In this example, we are using addInstance()
which will instantiate the indicated class and handle dependency resolution
Wiki Markup |
---|
{footnote}Be careful with this, because in some cases, resolving dependencies of the override class can require checking against the ServiceOverrides service, and you'll get a runtime exception about ServiceOverrides requiring itself!{footnote} |
. (Be careful with this, because in some cases, resolving dependencies of the override class can require checking against the ServiceOverrides service, and you'll get a runtime exception about ServiceOverrides requiring itself!).
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);
}
|
...
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.
...
{display-footnotes} Wiki Markup
Wiki Markup |
---|
{scrollbar} |