fix(di): allow injecting static attrs without type annotations
Closes #1226
This commit is contained in:
parent
94a48e8640
commit
a3387b7f48
|
@ -45,4 +45,12 @@ export class Attribute extends DependencyAnnotation {
|
||||||
super();
|
super();
|
||||||
this.attributeName = attributeName;
|
this.attributeName = attributeName;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
get token() {
|
||||||
|
//Normally one would default a token to a type of an injected value but here
|
||||||
|
//the type of a variable is "string" and we can't use primitive type as a return value
|
||||||
|
//so we use instance of Attribute instead. This doesn't matter much in practice as arguments
|
||||||
|
//with @Attribute annotation are injected by ElementInjector that doesn't take tokens into account.
|
||||||
|
return this;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -140,8 +140,6 @@ function _extractToken(typeOrFunc, annotations) {
|
||||||
}
|
}
|
||||||
ListWrapper.push(depProps, paramAnnotation);
|
ListWrapper.push(depProps, paramAnnotation);
|
||||||
|
|
||||||
} else if (paramAnnotation.name === "string") {
|
|
||||||
token = paramAnnotation;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -145,6 +145,13 @@ class NeedsAttribute {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class NeedsAttributeNoType {
|
||||||
|
fooAttribute;
|
||||||
|
constructor(@Attribute('foo') fooAttribute) {
|
||||||
|
this.fooAttribute = fooAttribute;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
class A_Needs_B {
|
class A_Needs_B {
|
||||||
constructor(dep){}
|
constructor(dep){}
|
||||||
}
|
}
|
||||||
|
@ -639,7 +646,7 @@ export function main() {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('static', () => {
|
describe('static attributes', () => {
|
||||||
it('should be injectable', () => {
|
it('should be injectable', () => {
|
||||||
var attributes = MapWrapper.create();
|
var attributes = MapWrapper.create();
|
||||||
MapWrapper.set(attributes, 'type', 'text');
|
MapWrapper.set(attributes, 'type', 'text');
|
||||||
|
@ -652,6 +659,16 @@ export function main() {
|
||||||
expect(needsAttribute.titleAttribute).toEqual('');
|
expect(needsAttribute.titleAttribute).toEqual('');
|
||||||
expect(needsAttribute.fooAttribute).toEqual(null);
|
expect(needsAttribute.fooAttribute).toEqual(null);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should be injectable without type annotation', () => {
|
||||||
|
var attributes = MapWrapper.create();
|
||||||
|
MapWrapper.set(attributes, 'foo', 'bar');
|
||||||
|
|
||||||
|
var inj = injector([NeedsAttributeNoType], null, null, null, attributes);
|
||||||
|
var needsAttribute = inj.get(NeedsAttributeNoType);
|
||||||
|
|
||||||
|
expect(needsAttribute.fooAttribute).toEqual('bar');
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in New Issue