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();
|
||||
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);
|
||||
|
||||
} 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 {
|
||||
constructor(dep){}
|
||||
}
|
||||
|
@ -639,7 +646,7 @@ export function main() {
|
|||
});
|
||||
});
|
||||
|
||||
describe('static', () => {
|
||||
describe('static attributes', () => {
|
||||
it('should be injectable', () => {
|
||||
var attributes = MapWrapper.create();
|
||||
MapWrapper.set(attributes, 'type', 'text');
|
||||
|
@ -652,6 +659,16 @@ export function main() {
|
|||
expect(needsAttribute.titleAttribute).toEqual('');
|
||||
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