refactor(di): Visibility.(Private|Public|PublicAndPrivate)
BREAKING CHANGE: Rename: - `PRIVATE` => `Visibility.Private` - `PUBLIC` => `Visibility.Public` - `PUBLIC_AND_PRIVATE` => `Visibility.PublicAndPrivate`
This commit is contained in:
parent
60af19f0e1
commit
5c328adb4b
|
@ -23,9 +23,7 @@ export {
|
||||||
ProtoInjector,
|
ProtoInjector,
|
||||||
BindingWithVisibility,
|
BindingWithVisibility,
|
||||||
DependencyProvider,
|
DependencyProvider,
|
||||||
PUBLIC_AND_PRIVATE,
|
Visibility,
|
||||||
PUBLIC,
|
|
||||||
PRIVATE,
|
|
||||||
UNDEFINED
|
UNDEFINED
|
||||||
} from './src/di/injector';
|
} from './src/di/injector';
|
||||||
export {Binding, BindingBuilder, ResolvedBinding, Dependency, bind} from './src/di/binding';
|
export {Binding, BindingBuilder, ResolvedBinding, Dependency, bind} from './src/di/binding';
|
||||||
|
|
|
@ -12,9 +12,7 @@ import {List, ListWrapper, MapWrapper, StringMapWrapper} from 'angular2/src/faca
|
||||||
import {
|
import {
|
||||||
Injector,
|
Injector,
|
||||||
ProtoInjector,
|
ProtoInjector,
|
||||||
PUBLIC_AND_PRIVATE,
|
Visibility,
|
||||||
PUBLIC,
|
|
||||||
PRIVATE,
|
|
||||||
UNDEFINED,
|
UNDEFINED,
|
||||||
Key,
|
Key,
|
||||||
Dependency,
|
Dependency,
|
||||||
|
@ -376,14 +374,15 @@ export class ProtoElementInjector {
|
||||||
private static _createBindingWithVisibility(firstBindingIsComponent, dirBinding, dirBindings,
|
private static _createBindingWithVisibility(firstBindingIsComponent, dirBinding, dirBindings,
|
||||||
binding) {
|
binding) {
|
||||||
var isComponent = firstBindingIsComponent && dirBindings[0] === dirBinding;
|
var isComponent = firstBindingIsComponent && dirBindings[0] === dirBinding;
|
||||||
return new BindingWithVisibility(binding, isComponent ? PUBLIC_AND_PRIVATE : PUBLIC);
|
return new BindingWithVisibility(binding,
|
||||||
|
isComponent ? Visibility.PublicAndPrivate : Visibility.Public);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static _createViewBindingsWithVisibility(bindings: List<ResolvedBinding>,
|
private static _createViewBindingsWithVisibility(bindings: List<ResolvedBinding>,
|
||||||
bd: BindingWithVisibility[]) {
|
bd: BindingWithVisibility[]) {
|
||||||
var db = <DirectiveBinding>bindings[0];
|
var db = <DirectiveBinding>bindings[0];
|
||||||
ListWrapper.forEach(db.resolvedViewBindings,
|
ListWrapper.forEach(db.resolvedViewBindings,
|
||||||
b => bd.push(new BindingWithVisibility(b, PRIVATE)));
|
b => bd.push(new BindingWithVisibility(b, Visibility.Private)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -18,9 +18,17 @@ const _MAX_CONSTRUCTION_COUNTER = 10;
|
||||||
|
|
||||||
export const UNDEFINED: Object = CONST_EXPR(new Object());
|
export const UNDEFINED: Object = CONST_EXPR(new Object());
|
||||||
|
|
||||||
export const PUBLIC: number = 1;
|
export enum Visibility {
|
||||||
export const PRIVATE: number = 2;
|
Public,
|
||||||
export const PUBLIC_AND_PRIVATE: number = 3;
|
Private,
|
||||||
|
PublicAndPrivate
|
||||||
|
}
|
||||||
|
|
||||||
|
function canSee(src: Visibility, dst: Visibility): boolean {
|
||||||
|
return (src === dst) ||
|
||||||
|
(dst === Visibility.PublicAndPrivate || src === Visibility.PublicAndPrivate);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
export interface ProtoInjectorStrategy {
|
export interface ProtoInjectorStrategy {
|
||||||
getBindingAtIndex(index: number): ResolvedBinding;
|
getBindingAtIndex(index: number): ResolvedBinding;
|
||||||
|
@ -50,16 +58,16 @@ export class ProtoInjectorInlineStrategy implements ProtoInjectorStrategy {
|
||||||
keyId8: number = null;
|
keyId8: number = null;
|
||||||
keyId9: number = null;
|
keyId9: number = null;
|
||||||
|
|
||||||
visibility0: number = null;
|
visibility0: Visibility = null;
|
||||||
visibility1: number = null;
|
visibility1: Visibility = null;
|
||||||
visibility2: number = null;
|
visibility2: Visibility = null;
|
||||||
visibility3: number = null;
|
visibility3: Visibility = null;
|
||||||
visibility4: number = null;
|
visibility4: Visibility = null;
|
||||||
visibility5: number = null;
|
visibility5: Visibility = null;
|
||||||
visibility6: number = null;
|
visibility6: Visibility = null;
|
||||||
visibility7: number = null;
|
visibility7: Visibility = null;
|
||||||
visibility8: number = null;
|
visibility8: Visibility = null;
|
||||||
visibility9: number = null;
|
visibility9: Visibility = null;
|
||||||
|
|
||||||
constructor(protoEI: ProtoInjector, bwv: BindingWithVisibility[]) {
|
constructor(protoEI: ProtoInjector, bwv: BindingWithVisibility[]) {
|
||||||
var length = bwv.length;
|
var length = bwv.length;
|
||||||
|
@ -138,7 +146,7 @@ export class ProtoInjectorInlineStrategy implements ProtoInjectorStrategy {
|
||||||
export class ProtoInjectorDynamicStrategy implements ProtoInjectorStrategy {
|
export class ProtoInjectorDynamicStrategy implements ProtoInjectorStrategy {
|
||||||
bindings: ResolvedBinding[];
|
bindings: ResolvedBinding[];
|
||||||
keyIds: number[];
|
keyIds: number[];
|
||||||
visibilities: number[];
|
visibilities: Visibility[];
|
||||||
|
|
||||||
constructor(protoInj: ProtoInjector, bwv: BindingWithVisibility[]) {
|
constructor(protoInj: ProtoInjector, bwv: BindingWithVisibility[]) {
|
||||||
var len = bwv.length;
|
var len = bwv.length;
|
||||||
|
@ -183,13 +191,13 @@ export class ProtoInjector {
|
||||||
|
|
||||||
|
|
||||||
export interface InjectorStrategy {
|
export interface InjectorStrategy {
|
||||||
getObjByKeyId(keyId: number, visibility: number): any;
|
getObjByKeyId(keyId: number, visibility: Visibility): any;
|
||||||
getObjAtIndex(index: number): any;
|
getObjAtIndex(index: number): any;
|
||||||
getMaxNumberOfObjects(): number;
|
getMaxNumberOfObjects(): number;
|
||||||
|
|
||||||
attach(parent: Injector, isHost: boolean): void;
|
attach(parent: Injector, isHost: boolean): void;
|
||||||
resetConstructionCounter(): void;
|
resetConstructionCounter(): void;
|
||||||
instantiateBinding(binding: ResolvedBinding, visibility: number): any;
|
instantiateBinding(binding: ResolvedBinding, visibility: Visibility): any;
|
||||||
}
|
}
|
||||||
|
|
||||||
export class InjectorInlineStrategy implements InjectorStrategy {
|
export class InjectorInlineStrategy implements InjectorStrategy {
|
||||||
|
@ -208,7 +216,7 @@ export class InjectorInlineStrategy implements InjectorStrategy {
|
||||||
|
|
||||||
resetConstructionCounter(): void { this.injector._constructionCounter = 0; }
|
resetConstructionCounter(): void { this.injector._constructionCounter = 0; }
|
||||||
|
|
||||||
instantiateBinding(binding: ResolvedBinding, visibility: number): any {
|
instantiateBinding(binding: ResolvedBinding, visibility: Visibility): any {
|
||||||
return this.injector._new(binding, visibility);
|
return this.injector._new(binding, visibility);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -218,65 +226,65 @@ export class InjectorInlineStrategy implements InjectorStrategy {
|
||||||
inj._isHost = isHost;
|
inj._isHost = isHost;
|
||||||
}
|
}
|
||||||
|
|
||||||
getObjByKeyId(keyId: number, visibility: number): any {
|
getObjByKeyId(keyId: number, visibility: Visibility): any {
|
||||||
var p = this.protoStrategy;
|
var p = this.protoStrategy;
|
||||||
var inj = this.injector;
|
var inj = this.injector;
|
||||||
|
|
||||||
if (p.keyId0 === keyId && (p.visibility0 & visibility) > 0) {
|
if (p.keyId0 === keyId && canSee(p.visibility0, visibility)) {
|
||||||
if (this.obj0 === UNDEFINED) {
|
if (this.obj0 === UNDEFINED) {
|
||||||
this.obj0 = inj._new(p.binding0, p.visibility0);
|
this.obj0 = inj._new(p.binding0, p.visibility0);
|
||||||
}
|
}
|
||||||
return this.obj0;
|
return this.obj0;
|
||||||
}
|
}
|
||||||
if (p.keyId1 === keyId && (p.visibility1 & visibility) > 0) {
|
if (p.keyId1 === keyId && canSee(p.visibility1, visibility)) {
|
||||||
if (this.obj1 === UNDEFINED) {
|
if (this.obj1 === UNDEFINED) {
|
||||||
this.obj1 = inj._new(p.binding1, p.visibility1);
|
this.obj1 = inj._new(p.binding1, p.visibility1);
|
||||||
}
|
}
|
||||||
return this.obj1;
|
return this.obj1;
|
||||||
}
|
}
|
||||||
if (p.keyId2 === keyId && (p.visibility2 & visibility) > 0) {
|
if (p.keyId2 === keyId && canSee(p.visibility2, visibility)) {
|
||||||
if (this.obj2 === UNDEFINED) {
|
if (this.obj2 === UNDEFINED) {
|
||||||
this.obj2 = inj._new(p.binding2, p.visibility2);
|
this.obj2 = inj._new(p.binding2, p.visibility2);
|
||||||
}
|
}
|
||||||
return this.obj2;
|
return this.obj2;
|
||||||
}
|
}
|
||||||
if (p.keyId3 === keyId && (p.visibility3 & visibility) > 0) {
|
if (p.keyId3 === keyId && canSee(p.visibility3, visibility)) {
|
||||||
if (this.obj3 === UNDEFINED) {
|
if (this.obj3 === UNDEFINED) {
|
||||||
this.obj3 = inj._new(p.binding3, p.visibility3);
|
this.obj3 = inj._new(p.binding3, p.visibility3);
|
||||||
}
|
}
|
||||||
return this.obj3;
|
return this.obj3;
|
||||||
}
|
}
|
||||||
if (p.keyId4 === keyId && (p.visibility4 & visibility) > 0) {
|
if (p.keyId4 === keyId && canSee(p.visibility4, visibility)) {
|
||||||
if (this.obj4 === UNDEFINED) {
|
if (this.obj4 === UNDEFINED) {
|
||||||
this.obj4 = inj._new(p.binding4, p.visibility4);
|
this.obj4 = inj._new(p.binding4, p.visibility4);
|
||||||
}
|
}
|
||||||
return this.obj4;
|
return this.obj4;
|
||||||
}
|
}
|
||||||
if (p.keyId5 === keyId && (p.visibility5 & visibility) > 0) {
|
if (p.keyId5 === keyId && canSee(p.visibility5, visibility)) {
|
||||||
if (this.obj5 === UNDEFINED) {
|
if (this.obj5 === UNDEFINED) {
|
||||||
this.obj5 = inj._new(p.binding5, p.visibility5);
|
this.obj5 = inj._new(p.binding5, p.visibility5);
|
||||||
}
|
}
|
||||||
return this.obj5;
|
return this.obj5;
|
||||||
}
|
}
|
||||||
if (p.keyId6 === keyId && (p.visibility6 & visibility) > 0) {
|
if (p.keyId6 === keyId && canSee(p.visibility6, visibility)) {
|
||||||
if (this.obj6 === UNDEFINED) {
|
if (this.obj6 === UNDEFINED) {
|
||||||
this.obj6 = inj._new(p.binding6, p.visibility6);
|
this.obj6 = inj._new(p.binding6, p.visibility6);
|
||||||
}
|
}
|
||||||
return this.obj6;
|
return this.obj6;
|
||||||
}
|
}
|
||||||
if (p.keyId7 === keyId && (p.visibility7 & visibility) > 0) {
|
if (p.keyId7 === keyId && canSee(p.visibility7, visibility)) {
|
||||||
if (this.obj7 === UNDEFINED) {
|
if (this.obj7 === UNDEFINED) {
|
||||||
this.obj7 = inj._new(p.binding7, p.visibility7);
|
this.obj7 = inj._new(p.binding7, p.visibility7);
|
||||||
}
|
}
|
||||||
return this.obj7;
|
return this.obj7;
|
||||||
}
|
}
|
||||||
if (p.keyId8 === keyId && (p.visibility8 & visibility) > 0) {
|
if (p.keyId8 === keyId && canSee(p.visibility8, visibility)) {
|
||||||
if (this.obj8 === UNDEFINED) {
|
if (this.obj8 === UNDEFINED) {
|
||||||
this.obj8 = inj._new(p.binding8, p.visibility8);
|
this.obj8 = inj._new(p.binding8, p.visibility8);
|
||||||
}
|
}
|
||||||
return this.obj8;
|
return this.obj8;
|
||||||
}
|
}
|
||||||
if (p.keyId9 === keyId && (p.visibility9 & visibility) > 0) {
|
if (p.keyId9 === keyId && canSee(p.visibility9, visibility)) {
|
||||||
if (this.obj9 === UNDEFINED) {
|
if (this.obj9 === UNDEFINED) {
|
||||||
this.obj9 = inj._new(p.binding9, p.visibility9);
|
this.obj9 = inj._new(p.binding9, p.visibility9);
|
||||||
}
|
}
|
||||||
|
@ -314,7 +322,7 @@ export class InjectorDynamicStrategy implements InjectorStrategy {
|
||||||
|
|
||||||
resetConstructionCounter(): void { this.injector._constructionCounter = 0; }
|
resetConstructionCounter(): void { this.injector._constructionCounter = 0; }
|
||||||
|
|
||||||
instantiateBinding(binding: ResolvedBinding, visibility: number): any {
|
instantiateBinding(binding: ResolvedBinding, visibility: Visibility): any {
|
||||||
return this.injector._new(binding, visibility);
|
return this.injector._new(binding, visibility);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -324,11 +332,11 @@ export class InjectorDynamicStrategy implements InjectorStrategy {
|
||||||
inj._isHost = isHost;
|
inj._isHost = isHost;
|
||||||
}
|
}
|
||||||
|
|
||||||
getObjByKeyId(keyId: number, visibility: number): any {
|
getObjByKeyId(keyId: number, visibility: Visibility): any {
|
||||||
var p = this.protoStrategy;
|
var p = this.protoStrategy;
|
||||||
|
|
||||||
for (var i = 0; i < p.keyIds.length; i++) {
|
for (var i = 0; i < p.keyIds.length; i++) {
|
||||||
if (p.keyIds[i] === keyId && (p.visibilities[i] & visibility) > 0) {
|
if (p.keyIds[i] === keyId && canSee(p.visibilities[i], visibility)) {
|
||||||
if (this.objs[i] === UNDEFINED) {
|
if (this.objs[i] === UNDEFINED) {
|
||||||
this.objs[i] = this.injector._new(p.bindings[i], p.visibilities[i]);
|
this.objs[i] = this.injector._new(p.bindings[i], p.visibilities[i]);
|
||||||
}
|
}
|
||||||
|
@ -352,7 +360,7 @@ export class InjectorDynamicStrategy implements InjectorStrategy {
|
||||||
}
|
}
|
||||||
|
|
||||||
export class BindingWithVisibility {
|
export class BindingWithVisibility {
|
||||||
constructor(public binding: ResolvedBinding, public visibility: number){};
|
constructor(public binding: ResolvedBinding, public visibility: Visibility){};
|
||||||
|
|
||||||
getKeyId(): number { return this.binding.key.id; }
|
getKeyId(): number { return this.binding.key.id; }
|
||||||
}
|
}
|
||||||
|
@ -454,7 +462,7 @@ export class Injector {
|
||||||
*/
|
*/
|
||||||
static fromResolvedBindings(bindings: List<ResolvedBinding>,
|
static fromResolvedBindings(bindings: List<ResolvedBinding>,
|
||||||
depProvider: DependencyProvider = null): Injector {
|
depProvider: DependencyProvider = null): Injector {
|
||||||
var bd = bindings.map(b => new BindingWithVisibility(b, PUBLIC));
|
var bd = bindings.map(b => new BindingWithVisibility(b, Visibility.Public));
|
||||||
var proto = new ProtoInjector(bd);
|
var proto = new ProtoInjector(bd);
|
||||||
var inj = new Injector(proto, null, depProvider);
|
var inj = new Injector(proto, null, depProvider);
|
||||||
return inj;
|
return inj;
|
||||||
|
@ -485,7 +493,7 @@ export class Injector {
|
||||||
* @returns an instance represented by the token. Throws if not found.
|
* @returns an instance represented by the token. Throws if not found.
|
||||||
*/
|
*/
|
||||||
get(token: any): any {
|
get(token: any): any {
|
||||||
return this._getByKey(Key.get(token), null, null, false, PUBLIC_AND_PRIVATE);
|
return this._getByKey(Key.get(token), null, null, false, Visibility.PublicAndPrivate);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -495,7 +503,7 @@ export class Injector {
|
||||||
* @returns an instance represented by the token. Returns `null` if not found.
|
* @returns an instance represented by the token. Returns `null` if not found.
|
||||||
*/
|
*/
|
||||||
getOptional(token: any): any {
|
getOptional(token: any): any {
|
||||||
return this._getByKey(Key.get(token), null, null, true, PUBLIC_AND_PRIVATE);
|
return this._getByKey(Key.get(token), null, null, true, Visibility.PublicAndPrivate);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -545,7 +553,7 @@ export class Injector {
|
||||||
*/
|
*/
|
||||||
createChildFromResolved(bindings: List<ResolvedBinding>,
|
createChildFromResolved(bindings: List<ResolvedBinding>,
|
||||||
depProvider: DependencyProvider = null): Injector {
|
depProvider: DependencyProvider = null): Injector {
|
||||||
var bd = bindings.map(b => new BindingWithVisibility(b, PUBLIC));
|
var bd = bindings.map(b => new BindingWithVisibility(b, Visibility.Public));
|
||||||
var proto = new ProtoInjector(bd);
|
var proto = new ProtoInjector(bd);
|
||||||
var inj = new Injector(proto, null, depProvider);
|
var inj = new Injector(proto, null, depProvider);
|
||||||
inj._parent = this;
|
inj._parent = this;
|
||||||
|
@ -569,17 +577,17 @@ export class Injector {
|
||||||
* @returns an object created using binding.
|
* @returns an object created using binding.
|
||||||
*/
|
*/
|
||||||
instantiateResolved(binding: ResolvedBinding): any {
|
instantiateResolved(binding: ResolvedBinding): any {
|
||||||
return this._instantiate(binding, PUBLIC_AND_PRIVATE);
|
return this._instantiate(binding, Visibility.PublicAndPrivate);
|
||||||
}
|
}
|
||||||
|
|
||||||
_new(binding: ResolvedBinding, visibility: number): any {
|
_new(binding: ResolvedBinding, visibility: Visibility): any {
|
||||||
if (this._constructionCounter++ > this._strategy.getMaxNumberOfObjects()) {
|
if (this._constructionCounter++ > this._strategy.getMaxNumberOfObjects()) {
|
||||||
throw new CyclicDependencyError(this, binding.key);
|
throw new CyclicDependencyError(this, binding.key);
|
||||||
}
|
}
|
||||||
return this._instantiate(binding, visibility);
|
return this._instantiate(binding, visibility);
|
||||||
}
|
}
|
||||||
|
|
||||||
private _instantiate(binding: ResolvedBinding, visibility: number): any {
|
private _instantiate(binding: ResolvedBinding, visibility: Visibility): any {
|
||||||
var factory = binding.factory;
|
var factory = binding.factory;
|
||||||
var deps = binding.dependencies;
|
var deps = binding.dependencies;
|
||||||
var length = deps.length;
|
var length = deps.length;
|
||||||
|
@ -690,7 +698,7 @@ export class Injector {
|
||||||
}
|
}
|
||||||
|
|
||||||
private _getByDependency(binding: ResolvedBinding, dep: Dependency,
|
private _getByDependency(binding: ResolvedBinding, dep: Dependency,
|
||||||
bindingVisibility: number): any {
|
bindingVisibility: Visibility): any {
|
||||||
var special = isPresent(this._depProvider) ?
|
var special = isPresent(this._depProvider) ?
|
||||||
this._depProvider.getDependency(this, binding, dep) :
|
this._depProvider.getDependency(this, binding, dep) :
|
||||||
UNDEFINED;
|
UNDEFINED;
|
||||||
|
@ -703,7 +711,7 @@ export class Injector {
|
||||||
}
|
}
|
||||||
|
|
||||||
private _getByKey(key: Key, lowerBoundVisibility: Object, upperBoundVisibility: Object,
|
private _getByKey(key: Key, lowerBoundVisibility: Object, upperBoundVisibility: Object,
|
||||||
optional: boolean, bindingVisibility: number): any {
|
optional: boolean, bindingVisibility: Visibility): any {
|
||||||
if (key === INJECTOR_KEY) {
|
if (key === INJECTOR_KEY) {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
@ -727,12 +735,12 @@ export class Injector {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_getByKeySelf(key: Key, optional: boolean, bindingVisibility: number): any {
|
_getByKeySelf(key: Key, optional: boolean, bindingVisibility: Visibility): any {
|
||||||
var obj = this._strategy.getObjByKeyId(key.id, bindingVisibility);
|
var obj = this._strategy.getObjByKeyId(key.id, bindingVisibility);
|
||||||
return (obj !== UNDEFINED) ? obj : this._throwOrNull(key, optional);
|
return (obj !== UNDEFINED) ? obj : this._throwOrNull(key, optional);
|
||||||
}
|
}
|
||||||
|
|
||||||
_getByKeyHost(key: Key, optional: boolean, bindingVisibility: number,
|
_getByKeyHost(key: Key, optional: boolean, bindingVisibility: Visibility,
|
||||||
lowerBoundVisibility: Object): any {
|
lowerBoundVisibility: Object): any {
|
||||||
var inj = this;
|
var inj = this;
|
||||||
|
|
||||||
|
@ -759,16 +767,16 @@ export class Injector {
|
||||||
}
|
}
|
||||||
|
|
||||||
_getPrivateDependency(key: Key, optional: boolean, inj: Injector): any {
|
_getPrivateDependency(key: Key, optional: boolean, inj: Injector): any {
|
||||||
var obj = inj._parent._strategy.getObjByKeyId(key.id, PRIVATE);
|
var obj = inj._parent._strategy.getObjByKeyId(key.id, Visibility.Private);
|
||||||
return (obj !== UNDEFINED) ? obj : this._throwOrNull(key, optional);
|
return (obj !== UNDEFINED) ? obj : this._throwOrNull(key, optional);
|
||||||
}
|
}
|
||||||
|
|
||||||
_getByKeyDefault(key: Key, optional: boolean, bindingVisibility: number,
|
_getByKeyDefault(key: Key, optional: boolean, bindingVisibility: Visibility,
|
||||||
lowerBoundVisibility: Object): any {
|
lowerBoundVisibility: Object): any {
|
||||||
var inj = this;
|
var inj = this;
|
||||||
|
|
||||||
if (lowerBoundVisibility instanceof SkipSelfMetadata) {
|
if (lowerBoundVisibility instanceof SkipSelfMetadata) {
|
||||||
bindingVisibility = inj._isHost ? PUBLIC_AND_PRIVATE : PUBLIC;
|
bindingVisibility = inj._isHost ? Visibility.PublicAndPrivate : Visibility.Public;
|
||||||
inj = inj._parent;
|
inj = inj._parent;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -776,7 +784,7 @@ export class Injector {
|
||||||
var obj = inj._strategy.getObjByKeyId(key.id, bindingVisibility);
|
var obj = inj._strategy.getObjByKeyId(key.id, bindingVisibility);
|
||||||
if (obj !== UNDEFINED) return obj;
|
if (obj !== UNDEFINED) return obj;
|
||||||
|
|
||||||
bindingVisibility = inj._isHost ? PUBLIC_AND_PRIVATE : PUBLIC;
|
bindingVisibility = inj._isHost ? Visibility.PublicAndPrivate : Visibility.Public;
|
||||||
inj = inj._parent;
|
inj = inj._parent;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -24,9 +24,7 @@ import {
|
||||||
Optional,
|
Optional,
|
||||||
Inject,
|
Inject,
|
||||||
BindingWithVisibility,
|
BindingWithVisibility,
|
||||||
PUBLIC,
|
Visibility
|
||||||
PRIVATE,
|
|
||||||
PUBLIC_AND_PRIVATE
|
|
||||||
} from 'angular2/di';
|
} from 'angular2/di';
|
||||||
|
|
||||||
import {InjectorInlineStrategy, InjectorDynamicStrategy} from 'angular2/src/di/injector';
|
import {InjectorInlineStrategy, InjectorDynamicStrategy} from 'angular2/src/di/injector';
|
||||||
|
@ -289,8 +287,8 @@ export function main() {
|
||||||
it('should show the full path when error happens in a constructor', () => {
|
it('should show the full path when error happens in a constructor', () => {
|
||||||
var bindings = Injector.resolve([Car, bind(Engine).toClass(BrokenEngine)]);
|
var bindings = Injector.resolve([Car, bind(Engine).toClass(BrokenEngine)]);
|
||||||
var proto = new ProtoInjector([
|
var proto = new ProtoInjector([
|
||||||
new BindingWithVisibility(bindings[0], PUBLIC),
|
new BindingWithVisibility(bindings[0], Visibility.Public),
|
||||||
new BindingWithVisibility(bindings[1], PUBLIC)
|
new BindingWithVisibility(bindings[1], Visibility.Public)
|
||||||
]);
|
]);
|
||||||
var injector = new Injector(proto, null, null);
|
var injector = new Injector(proto, null, null);
|
||||||
|
|
||||||
|
@ -307,10 +305,12 @@ export function main() {
|
||||||
|
|
||||||
it('should provide context when throwing an exception ', () => {
|
it('should provide context when throwing an exception ', () => {
|
||||||
var engineBinding = Injector.resolve([bind(Engine).toClass(BrokenEngine)])[0];
|
var engineBinding = Injector.resolve([bind(Engine).toClass(BrokenEngine)])[0];
|
||||||
var protoParent = new ProtoInjector([new BindingWithVisibility(engineBinding, PUBLIC)]);
|
var protoParent =
|
||||||
|
new ProtoInjector([new BindingWithVisibility(engineBinding, Visibility.Public)]);
|
||||||
|
|
||||||
var carBinding = Injector.resolve([Car])[0];
|
var carBinding = Injector.resolve([Car])[0];
|
||||||
var protoChild = new ProtoInjector([new BindingWithVisibility(carBinding, PUBLIC)]);
|
var protoChild =
|
||||||
|
new ProtoInjector([new BindingWithVisibility(carBinding, Visibility.Public)]);
|
||||||
|
|
||||||
var parent = new Injector(protoParent, null, null, () => "parentContext");
|
var parent = new Injector(protoParent, null, null, () => "parentContext");
|
||||||
var child = new Injector(protoChild, parent, null, () => "childContext");
|
var child = new Injector(protoChild, parent, null, () => "childContext");
|
||||||
|
@ -449,7 +449,8 @@ export function main() {
|
||||||
|
|
||||||
it("should return a private dependency declared at the host", () => {
|
it("should return a private dependency declared at the host", () => {
|
||||||
var engine = Injector.resolve([Engine])[0];
|
var engine = Injector.resolve([Engine])[0];
|
||||||
var protoParent = new ProtoInjector([new BindingWithVisibility(engine, PRIVATE)]);
|
var protoParent =
|
||||||
|
new ProtoInjector([new BindingWithVisibility(engine, Visibility.Private)]);
|
||||||
var parent = new Injector(protoParent);
|
var parent = new Injector(protoParent);
|
||||||
|
|
||||||
var child = Injector.resolveAndCreate(
|
var child = Injector.resolveAndCreate(
|
||||||
|
@ -462,7 +463,8 @@ export function main() {
|
||||||
|
|
||||||
it("should not return a public dependency declared at the host", () => {
|
it("should not return a public dependency declared at the host", () => {
|
||||||
var engine = Injector.resolve([Engine])[0];
|
var engine = Injector.resolve([Engine])[0];
|
||||||
var protoParent = new ProtoInjector([new BindingWithVisibility(engine, PUBLIC)]);
|
var protoParent =
|
||||||
|
new ProtoInjector([new BindingWithVisibility(engine, Visibility.Public)]);
|
||||||
var parent = new Injector(protoParent);
|
var parent = new Injector(protoParent);
|
||||||
|
|
||||||
var child = Injector.resolveAndCreate(
|
var child = Injector.resolveAndCreate(
|
||||||
|
@ -489,7 +491,8 @@ export function main() {
|
||||||
describe("default", () => {
|
describe("default", () => {
|
||||||
it("should return a private dependency declared at the host", () => {
|
it("should return a private dependency declared at the host", () => {
|
||||||
var engine = Injector.resolve([Engine])[0];
|
var engine = Injector.resolve([Engine])[0];
|
||||||
var protoParent = new ProtoInjector([new BindingWithVisibility(engine, PRIVATE)]);
|
var protoParent =
|
||||||
|
new ProtoInjector([new BindingWithVisibility(engine, Visibility.Private)]);
|
||||||
var parent = new Injector(protoParent);
|
var parent = new Injector(protoParent);
|
||||||
|
|
||||||
var child = Injector.resolveAndCreate([
|
var child = Injector.resolveAndCreate([
|
||||||
|
@ -504,7 +507,8 @@ export function main() {
|
||||||
|
|
||||||
it("should return a public dependency declared at the host", () => {
|
it("should return a public dependency declared at the host", () => {
|
||||||
var engine = Injector.resolve([Engine])[0];
|
var engine = Injector.resolve([Engine])[0];
|
||||||
var protoParent = new ProtoInjector([new BindingWithVisibility(engine, PUBLIC)]);
|
var protoParent =
|
||||||
|
new ProtoInjector([new BindingWithVisibility(engine, Visibility.Public)]);
|
||||||
var parent = new Injector(protoParent);
|
var parent = new Injector(protoParent);
|
||||||
|
|
||||||
var child = Injector.resolveAndCreate([
|
var child = Injector.resolveAndCreate([
|
||||||
|
@ -519,7 +523,8 @@ export function main() {
|
||||||
|
|
||||||
it("should not return a private dependency declared NOT at the host", () => {
|
it("should not return a private dependency declared NOT at the host", () => {
|
||||||
var engine = Injector.resolve([Engine])[0];
|
var engine = Injector.resolve([Engine])[0];
|
||||||
var protoParent = new ProtoInjector([new BindingWithVisibility(engine, PRIVATE)]);
|
var protoParent =
|
||||||
|
new ProtoInjector([new BindingWithVisibility(engine, Visibility.Private)]);
|
||||||
var parent = new Injector(protoParent);
|
var parent = new Injector(protoParent);
|
||||||
|
|
||||||
var child = Injector.resolveAndCreate([
|
var child = Injector.resolveAndCreate([
|
||||||
|
|
Loading…
Reference in New Issue