Dưới đây là một số tùy chọn:
Lựa chọn 0: Nhà máy Resolver
foo.js
import {inject} from 'aurelia-framework';
import {FooDependency} from './foo-dependency';
@inject(FooDependency)
export class Foo {
constructor(dep, config) {
}
}
nhu cầu-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);
}
}
Lựa chọn 1: Nhà máy
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);
}
}
nhu cầu-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);
}
}
Phương án 2: Child container
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) {
}
}
nhu cầu-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);
}
}
Lựa chọn 3: Brute Force
foo.js
export class Foo {
constructor(dep, config) {
}
}
nhu cầu-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);
}
}
Nguồn
2016-01-14 17:30:58
ồ người đàn ông- Tôi nghĩ bạn cần thiết lập cấu hình động, mỗi khi một 'Foo' được khởi tạo. Nó có vẻ như cho nhu cầu của bạn, không ai trong số những gì chúng tôi đã làm là cần thiết. Tất cả bạn cần làm là đăng ký cấu hình của bạn trong container: 'container.registerInstance ('config key', myConfig);' sau đó thêm '@inject (Dependency, 'config key')' to 'Foo'. –
@ JeremyDanyow Không, bạn đã đúng lần đầu tiên, thiết lập tự động mỗi lần. Cách này cho phép tôi gọi 'Foo.useArgs()' với một giá trị khác nhau mỗi khi tôi muốn sử dụng Foo, bởi vì nó trả về một thể hiện mới của 'Resolver' mỗi lần. – NeonPaul