核心类Injector
Injector 通过下面的方法 注册和注销 inject,
mapValue,mapClass,mapSingleton/mapSingletonOf,mapRule,unmap
Injector 通过下面的方法在实际类中 注入 inject,或者使用在Injector中注册的inject的信息,
injectInto,getInstance,hasMapping,instantiate
(1)主要类
Injector 注入器
主要使用类
InjectionType 注入类型
VALUE
CLASS
SINGLETON
Reflector 反射工具类
取得Fully Qualified Class Name
取得Class
判断class Extends Or Implements
InjectionConfig 注入配置类
根据此类得到注入inject实例
InjectionResult 注入实例生成策略
当InjectionType为VALUE/CLASS/SINGLETON/OtherRule时,生成inject类实例的具体实现类。
InjectionPoint注入点
Method
NoParamsConstructor
PostConstruct
Property
Constructor
(2)Injector
-
m_mappings
存放(requestName + '#' + named~InjectionConfig)
['‘Fully Qualified Class Name“-injectCOnfig] key-value
-
mapValue (以value供inject)
把实例直接放入InjectionConfig,然后把InjectionConfig放入['‘Fully Qualified Class Name“-injectCOnfig]maping。
当注入使用时,直接使用这个实例。
//格式
mapValue(whenAskedFor : Class, useValue : Object, named : String = "")
//配置映射
var myClassInstance:MyClass = new MyClass();
injector.mapValue(MyClass, myClassInstance);
//在其他类中使用
[Inject]public var myClassInstance:MyClass
注意,使用这种注入方式时,如果这个实例中也有[Inject],是不会被自动注入实例的。
如果需要,可以手动注入:
injector.injectInto(myClassInstance);
-
mapClass(以Class供inject)
把类名放入InjectionConfig,然后把InjectionConfig放入['‘Fully Qualified Class Name“-injectCOnfig] maping。
当注入使用时,由Injector实例化这个类的一个新实例。
//格式
mapClass( whenAskedFor : Class, instantiateClass : Class, named : String = "")
//配置映射
injector.mapClass(MyClass);
//在其他类中使用
[Inject]public var myClassInstance:MyClass
注意,使用这种注入方式时,如果这个类也有[Inject],是会被自动注入的,并且每次会产生一个新的注入实例。
-
mapSingleton/mapSingletonOf(以Singleton Class供inject)
把类名放入InjectionConfig,然后把InjectionConfig放入['‘Fully Qualified Class Name“-injectCOnfig]maping。
当注入使用时,如果实例不存在,则由Injector实例化这个类的实例使用,如果存在,则使用存在的实例。
mapSingleton 用于注入类
//格式
mapSingleton(whenAskedFor : Class, named : String = "")
//配置映射
injector.mapSingleton(MyClass);
//在其他类中使用
[Inject]public var myClassInstance:MyClass
mapSingletonOf 用于注入接口
//格式
mapSingletonOf( whenAskedFor : Class, useSingletonOf : Class, named : String = "")
//配置映射
injector.mapSingletonOf(IMyClass, MyClass); //MyClass implements IMyClass
//在其他类中使用
[Inject]
public var myClassInstance:IMyClass
注意,使用这种注入方式时,如果这个类也有[Inject],是会被自动注入的,并且每次使用的是同一个实例。
-
mapRule(根据规则生成inject实例)
//格式
mapRule(whenAskedFor : Class, useRule : *, named : String = "")
useRule 为InjectionConfig的子类。
InjectionConfig有一个getResponse(injector : Injector) : Object方法
通过这个方法来得到实例
-
getMapping
getMapping(whenAskedFor : Class, named : String = "") : InjectionConfig
根据Fully Qualified Class Name取得InjectionConfig。
-
injectInto
injectInto(target : Object)
target是带有[Inject] 的类实例,通过injectInto方法把它需要的实例注入。
-
instantiate
instantiate(clazz:Class):*
clazz是带有[Inject] 的类,实例化这个类,并通过injectInto方法把它需要的实例注入。
-
unmap
unmap(clazz : Class, named : String = "")
把clazz 从Injector中去掉,是mapValue,mapClass,mapSingleton/mapSingletonOf, mapRule的反操作。
-
hasMapping
hasMapping(clazz : Class, named : String = '') : Boolean
判断clazz是否在Injector中mapping中
-
getInstance
getInstance(clazz : Class, named : String = '') : *
如果clazz已经在Injector中注册,取得clazz在Injector中实例
-
createChildInjector/setParentInjector
child parent Injector策略