4.5.1.3.5. Controller Dependency Injection
Dependency Injection in controllers can be used to acquire references to utilized objects. For this purpose it is required to declare either a field of the corresponding type or a write access method (setter) with an appropriate parameter type and with one of the following annotations:
-  @Inject– the simplest option, where an object for injection will be found according to the field/method type and the name of the field or attribute corresponding to the method according to JavaBeans rules.
-  @Named("someName")– explicitly defines the name of the target object.
The following objects can be injected into controllers:
-  This screen’s visual components defined in the XML-descriptor. If the attribute type is derived from Component, the system will search for a component with the corresponding name within the current screen.
-  Actions defined in the XML-descriptor – see Actions. The Action Interface. 
-  Datasources defined in the XML-descriptor. If the attribute type is derived from Datasource, the system will search for a datasource with the corresponding name in the current screen.
-  UserSession. If the attribute type is UserSession, the system will inject an object of the current user session.
-  DsContext. If the attribute type isDsContext, the system will inject theDsContextof the current screen.
-  WindowContext. If the attribute type isWindowContext, the system will inject theWindowContextof the current screen.
-  DataSupplier. If the attribute type is DataSupplier, the corresponding instance will be injected.
-  Any bean defined in the context of a given client block, including: -  Middleware services imported by Client 
-  ComponentsFactory
-  WindowConfig
-  ExportDisplay
 
-  
-  If nothing of the mentioned above is appropriate and the controller has companions, a companion for the current client type will be injected, if the types match. 
It is possible to inject parameters passed in a map to the init() method into the controller using @WindowParam annotation. The annotation has the name attribute which contains the parameter name (a key in the map) and an optional required attribute. If required = true and the map does not contain the corresponding parameter a WARNING message is added to the log.
An example of the injection of a Job entity passed to the controller’s init() method:
@WindowParam(name = "job", required = true)
protected Job job;