Injector 依赖注入会帮助我们创建Service、Factory、Provider,自动创建依赖并注入
起步
初始化Injector
var injector = ;
定义变量
定义方式
injectorvalue'configInfo' info:'configInfo' ; var configInfo = injector;
定义Service:
{ thisserviceText = 'serviceA hello world' + Math; this{ return this; } }
定义方式:
1.通过类型获取Service
injector; var sA = injector; sA; // 'serviceA hello world..'
2.通过名称获取Service
injector; var sA = injector 或者 injector sA; // 'serviceA hello world..'
3.Service是单例的
var sB = injector; sB === sA; //true //获取不同的实例 var sC = injector 或 injector; sC === sB // false
4.Service的名称
//定义Service的时候不指定Service名称,injector会自动生成默认的Service名称 injector; Injector; //获取Service名称 Injector; //自定义Service的名称 //获取Service var sA = injector; //通过名称获取 sA = injector; //通过类型获取 //注:在声明Service的时候定义名称,这个名称拥有最高优先级,会覆盖之前定义的Service名称 injector; sA = injector;
5.Service的依赖注入
{ this{ return serviceA; } } injector; var sB = injector; sB; // 'serviceA hello world ..' //注:这种方式仅在代码为经过压缩的时候生效,且serviceA的名称是serviceA时可用 //定义依赖 serviceB$injector = serviceA; //通过类型注入 serviceB$injector = 'serviceA';//通过名称注入 //声明时定义依赖 injector; //依赖通过名称注入 injector; //依赖通过类型注入 注:Service依赖可以时已经声明的Value、Service、Factory如依赖的是Service,则会返回单例的实例
定义Factory
{ return text:'factoryA helloworld' + Math { return thistext; } ; }
定义方式
1.通过类型
injector; var fA = injector; fA; // 'factoryA helloworld..' var fA_ = injector; fA === fA_; // false var fA__ = injector; fA__; // 'factoryA helloworld..' 与getFactory 等效
2.通过名称
injector; var fA = injector 或 injector; fA; // 'factoryA helloworld..'
3.Factory名称
//定义Factory的时候不指定Factory名称,injector会自动生成默认的Service名称 injector; Injector; //获取Factory名称 Injector; //自定义Factory的名称 //获取Service var fA = injector; //通过名称获取 fA = injector; //通过类型获取 //注:在声明Factory的时候定义名称,这个名称拥有最高优先级,会覆盖之前定义的Factory名称 injector; fA = injector;
4.factory名称
{ this{ return factoryA; } } injector; var fB = injector; fB; // 'factoryA helloworld..' //注:这种方式仅在代码为经过压缩的时候生效,且factoryA的名称是factoryA时可用 //定义依赖 factoryB$injector = factoryA; //通过类型注入 factoryB$injector = 'factoryA';//通过名称注入 //声明时定义依赖 injector; //依赖通过名称注入 injector; //依赖通过类型注入 注:Service依赖可以时已经声明的Value、Service、Factory如依赖的是Service,则会返回新创建的实例
调用函数
injector; injector; injector;
定义Provider
1.定义方式
{ thistestText = 'providerA text'; this{ return thistestText; } } injector; var pA = injector; pA; // 'providerA text'; var pA_ = injector; pA === pA_; //true Provider是单例的 注:Provider的定义与Service、Factory类似,区别在于Provider只能依赖已经声明的Provider且必须包含一个$get方法签名
Injector的继承
1.继承方式
var injectorB = injector; var sA = injectorB; //获取injector中定义的Service injectorB; sA = injectorB; sA; // 'serviceB from injectorB'
2.多继承
var injectorC = ; var injectorD = injectorAinjectorC; //或 new HERE.Injector([injectorA,injectorC]); injectorD; //注:获取Service、Factory、Provider、Value顺序:先从injectorD中获取,获取不到则从injectorA、injectorC中获取
配置
Injector; //注:配置需要在初始化Injector之前进行,初始化后不能进行配置,一般不需要配置,当$injectorName、$injector发生命名冲突时才需要配置