I have a class whose constructor has two arguments; one is a dependency, the other is a configuration property:
@inject(Dependency)
class MyClass{
constructor(dependency, config){
}
}
How can I make use of Aurelia's dependency injection to automatically inject the dependency but allow the class's consumer to specify the config value?
Here are some options:
foo.js
import {inject} from 'aurelia-framework';
import {FooDependency} from './foo-dependency';
@inject(FooDependency)
export class Foo {
constructor(dep, config) {
}
}
needs-foo.js
import {inject, Factory} from 'aurelia-framework';
import {Foo} from './foo';
@inject(Factory.of(Foo))
export class NeedsFoo {
constructor(fooFactory) {
let config = {};
this.foo = fooFactory(config);
}
}
foo.js
import {inject} from 'aurelia-framework';
import {FooDependency} from './foo-dependency';
class Foo {
constructor(dep, config) {
}
}
@inject(FooDependency)
export class FooFactory {
constructor(dep) {
this.dep = dep;
}
makeFoo(config) {
return new Foo(this.dep, config);
}
}
needs-foo.js
import {inject} from 'aurelia-framework';
import {FooFactory} from './foo';
@inject(FooFactory)
export class NeedsFoo {
constructor(fooFactory) {
let config = {};
this.foo = fooFactory.makeFoo(config);
}
}
foo.js
import {inject} from 'aurelia-framework';
import {FooDependency} from './foo-dependency';
export const configKey = 'config';
@inject(FooDependency, configKey)
export class Foo {
constructor(dep, config) {
}
}
needs-foo.js
import {inject, Container} from 'aurelia-framework';
import {Foo, configKey} from './foo';
@inject(Container)
export class NeedsFoo {
constructor(container) {
let config = {};
let childContainer = container.createChild();
childContainer.registerInstance(configKey, config);
this.foo = childContainer.get(Foo);
}
}
foo.js
export class Foo {
constructor(dep, config) {
}
}
needs-foo.js
import {inject, Container} from 'aurelia-framework';
import {FooDependency} from './foo-dependency';
import {Foo} from './foo';
@inject(Container)
export class NeedsFoo {
constructor(container) {
let config = {};
let dep = container.get(FooDependency);
this.foo = new Foo(dep, config);
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With