2016-04-15 6 views
1

Das Szenario: Ich habe zwei abgeleitete Klassen, die beide die ActionBase-Klasse wie folgt erweitern. Ich möchte DI für beide abgeleiteten Klassen verwenden. Aber beide Klassen haben unterschiedliche Abhängigkeiten. Das sollte möglich sein, oder? Was mache ich falsch? In beiden Fällen sind die injizierten Instanzen/Module "undefiniert". Irgendwelche Hilfe/Hinweis geschätzt.Aurelia: Dep. Injektion auf abgeleitete Klassen nicht möglich? (oder was mache ich falsch ?!)

/* 
* Base class for Actions 
*/ 

export class ActionBase { 

    type; 

    constructor(type) { 
    this.type = type; 
    } 
} 





/* 
* Derived Class: InsertAction 
*/ 

import {inject} from 'aurelia-framework'; 
import {ActionBase} from './ActionBase'; 
import {PomManager} from '../manager/PomManager'; 

@inject(PomManager) 
export class InsertAction extends ActionBase { 

    pomManager; 

    constructor(pomManager) { 
    super("insert"); 
    this.pomManager = pomManager; 
    console.log("[InsertAction:constructor] pomManager: ", this.pomManager); // undefined 
    } 
} 





/* 
* Derived Class: RenderAction 
*/ 

import {inject} from 'aurelia-framework'; 
import {ActionBase} from './ActionBase'; 
import {AnotherManager} from '../manager/AnotherManager'; 

@inject(AnotherManager) 
export class RenderAction extends ActionBase { 

    anotherManager; 

    constructor(anotherManager) { 
    super("render"); 
    this.anotherManager = anotherManager; 
    console.log("[RenderAction:constructor] anotherManager: ", this.anotherManager); // undefined 
    } 
} 
+0

das möglich sein sollte. Sind Sie sicher, dass "./ActionBase" der korrekte Pfad der ActionBase-Klassendatei ist? –

+0

Ja. Dieser Teil funktioniert gut (das obige Snippet ist natürlich nicht in einer einzigen Datei). Methoden werden geerbt und funktionieren wie erwartet ... Es funktioniert nur, wenn ich die Abhängigkeiten auf Basisklassenebene einfüge ... aber nicht alle abgeleiteten Klassen haben die gleichen Abhängigkeiten ... also ist das keine Option. Irgendwelche Ideen? – simonwidjaja

Antwort

1

Es wird unterstützt. Sehen Sie sich dieses Arbeitsbeispiel an, in dem Action1 und Action2 BaseAction erweitern und jeweils unterschiedliche Abhängigkeiten haben.

Hier ist ein Beispiel: https://gist.run?id=0efabf77c649f41981dcde753fdc542c

app.js

import {inject} from 'aurelia-dependency-injection' 
import {Action1, Action2} from './classes' 

@inject(Action1, Action2) 
export class App { 
    constructor(a1, a2){ 
    this.message = "look at console output"; 
    console.log("a1", a1.dep.constructor.name); 
    console.log("a2", a2.dep.constructor.name); 
    } 
} 

classes.js

import {inject} from 'aurelia-dependency-injection' 
export class Action1Dependency {} 
export class Action2Dependency {} 

export class ActionBase{ 

} 

@inject(Action1Dependency) 
export class Action1 extends ActionBase{ 
    constructor(dep){ 
    super(); 
    this.dep = dep; 
    } 
} 

@inject(Action2Dependency) 
export class Action2 extends ActionBase{ 
    constructor(dep){ 
    super(); 
    this.dep = dep; 
    } 
}