fix(di): allow injecting static attrs without type annotations

Closes #1226
This commit is contained in:
Pawel Kozlowski 2015-04-03 17:23:13 +02:00
parent 94a48e8640
commit a3387b7f48
3 changed files with 26 additions and 3 deletions

View File

@ -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;
}
}

View File

@ -140,8 +140,6 @@ function _extractToken(typeOrFunc, annotations) {
}
ListWrapper.push(depProps, paramAnnotation);
} else if (paramAnnotation.name === "string") {
token = paramAnnotation;
}
}

View File

@ -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');
});
});
});