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(); 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;
}
} }

View File

@ -140,8 +140,6 @@ function _extractToken(typeOrFunc, annotations) {
} }
ListWrapper.push(depProps, paramAnnotation); 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 { 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');
});
}); });
}); });