我面临一个与奥雷利亚注射有关的问题。
我想知道如何在没有注入的情况下实现验证、事件聚合器和路由器。
下面你可以找到一个例子,它可以让你清楚地了解实现和我被困的地方。
类profile与视图交互,addresslist的对象在profile类中创建,这个对象(addresslist)与视图交互。
例如:

@inject(EventAggregator, Validation, Router)
export class Profile{
      addressList: Array<AddressList> = [];
      eventAgg:any;
      _validation:any;
      _router:any;
      constructor(EventAggregator, Validation, Router )
                  {
                   this.eventAgg = EventAggregator;
                   this._validation = Validation;
                   this._router = Router;
                   this.addressList.push(new AddressList());
                  }
}

export class AddressList{
      street1:string = "street1";
      street2:string = "street2";
constructor(){
}

现在我想在addresslist的construtor中实现对addresslist属性的验证而不通过验证
我不想要这个
this.addressList.push(new AddressList(Valdiation));

因为当我想在addresslist的构造函数中传递参数时,这会产生问题。
我认为当我们试图在另一个视图模型中组合一个视图模型,而构造函数需要一些用户定义的参数时,也会出现这个问题。
提前谢谢你,
脚踝
问题的更新/更改
我按照Matthew James Davis的建议进行了更改。
但我无法理解为什么地址列表是未定义的。
更新的代码
import { Factory } from 'aurelia-framework';
import { ObserverLocator } from 'aurelia-framework';
import { EventAggregator } from 'aurelia-event-aggregator';
import { Validation, ensure } from 'aurelia-validation';

@inject(EventAggregator, Validation, Factory.of(AddressList))
export class Profile{
   addressList: Array<AddressList> = [];
      eventAgg:any;
      _validation:any;
      _router:any;
      constructor(EventAggregator, Validation, AddressList)
                  {
                   this.eventAgg = EventAggregator;
                   this._validation = Validation;
                   this.addressList.push(AddressList(["street1","street2"]));
                  }
 }

@inject(Validation)
export class AddressList{
      street1:string = "street1";
      street2:string = "street2";
      constructor(Validation, args){
         this.street1=args[0];
         this.street2=args[1];
     }
}

控制台错误
AddressList
function() {
        for (var _len = arguments.length, rest = Array(_len), _key = 0; _key < _len; _key++) {
        rest[_key] = arguments[_key];
        }

    return container.invoke(_this2._…
AddressList ()

javascript - 在类对象上使用验证而不在Aurelia中进行注入(inject)-LMLPHP
错误是由于容器中的此行造成的。Prototype.\u CreateInvocationHandler:
 if (fn.inject === undefined)

FN未定义。
我想这可能对你有帮助,但我仍在努力找出问题所在。

最佳答案

正如patrick所指出的,您可以使用aurelia的Factory解析器来实现这一点:

import { Factory } from 'aurelia-framework';

@inject(Factory.of(AddressList))
export class Profile {

    addressList: Array<AddressList> = [];

    constructor(AddressList) {
        this.addressList.push(
            AddressList(['123 Elm St.', 'Apt B.'])
        );
    }
}

@inject(Validation)
export class AddressList {

    street1;
    street2;

    constructor(Validation, addressList: string[]) {
        this._validation = Validation;
        this.street1 = addressList[0];
        this.street2 = addressList[1];
    }
}

09-28 12:56