Injection DSL
The injection DSL is a domain specific language that denotes what to inject in the current placeholder: property, argument, or method via the inject annotation. This injection DSL not only can it be used via annotations but also via our mapping DSL whenever a dsl argument can be used. This DSL is constructed by joining words separated by a : colon. The first part of this string is what we will denote as the injection DSL Namespace.
1
inject="{namespace}:extra:extra:extra"
Copied!

Property Annotation

Every cfproperty can be annotated with our injection annotations:
  • @inject : The injection DSL
  • @scope : The visibility scope to inject the dependency into. By default it injects into variables scope
1
property name="service" inject="id:MyService";
2
3
property name="TYPES" inject="id:CustomTypes" scope="this";
4
5
property name="roles" inject="id:RoleService:getRoles" scope="instance";
Copied!

Constructor Argument Annotation

You can also use annotated constructor arguments with the inject annotation.
1
<--- Via tag based annotations --->
2
<cffunction name="init" returntype="any" output="false">
3
<cfargument name="myService" inject="UserService">
4
<cfargument name="cache" inject="cachebox:default">
5
6
</cffunction>
7
8
9
// Via script but alternative method as inline annotations are broken in ACF
10
11
/**
12
* Init
13
* @myService.inject UserService
14
* @cache.inject cachebox:default
15
*/
16
function init(required myService, required cache){
17
}
Copied!
Caution In full script components, annotating inline arguments is broken in Adobe ColdFusion 9. You will have to annotate them via the alternative annotation syntax in ColdFusion 9 via the javadocs style comments.

Setter Method Annotation

You can also annotate setter methods with the inject annotation to provide injections
1
<--- Via tag based annotations --->
2
<cffunction name="setService" returntype="any" output="false" inject="UserService">
3
<cfargument name="service">
4
</cffunction>
5
6
7
function setService(required service) inject="UserService"{
8
variables.service = arguments.service;
9
}
Copied!
WireBox offers a wide gamut of annotation namespaces you can use in your CFML applications and ColdBox applications. However, we took it a step further and allowed you to create your own custom DSL namespaces making your annotations come alive!
Last modified 2yr ago