sourceafIoc::Inject.fan


** Use in classes to denote a field that should be dependency injected.
** 
** It is the intention that '@Inject' be (re)used as a general purpose facet by many dependency providers in IoC 
** and by custom libraries.
** Hence support for the attributes 'id', 'type', and 'optional' is entirely dependent on the individual dependency provider.
** 
** Core IoC dependency providers use the '@Inject' facet to:
** 
**  - inject IoC services
**  - inject Log instances
**  - mark ctors to use for autobuilding / service creation.
** 
@Js
facet class Inject {

    ** When injecting services, 'id' denotes the qualified ID of the service to inject. (optional)
    ** 
    ** When injecting 'Log' instances, 'id' denotes the log name. (optional)
    const Str? id       := null
    
    ** When injecting services, 'type' is used to look up the service - which may be different 
    ** (or more specific) than the field type. (optional)
    const Type? type    := null
    
    ** If 'true' and the dependency / service does not exist then injection should fail silently 
    ** without causing an Err.
    const Bool optional := false

}