javascript - Angular2 DI i Typescript. Kan vi bruke det i node.js/ikke-Angular prosjekter?


Var Angular2 avhengighetsinjeksjonsbeholderen designet for selvstendig bruk, og er det mulig å bruke den for TypeScript/JavaScript server-side applikasjoner?

Jeg åpnet en sak den 16. oktober (https://github.com/angular/di.js/issues/108) på di-prosjektet som jeg antar skulle bli inkludert i v2. Tydeligvis var dette ikke mulig. Hva skjer med den nye angular2 di? Kan jeg bruke den på egen hånd med js/es6/ts-prosjekter?

Svar #1

Det ser ut til at noen nylig (jan 2017) har hentet ut avhengighetsinjeksjon fra Angular2, noe som gjør at det kan brukes utenfor rammeverket.

https://github.com/mgechev/injection-js

Svar #2

Fra og med Angular 2 RC.5 er DI en del av @angular/core-pakken. For ikke-Angular-bruk ble den nylig utskilt i injection-js-pakken av Minko Gechev, et medlem av Angular-teamet.

Her er et kort ES6-eksempel som er Node-vennlig:

// may not be needed for injection-js and recent @angular/core versions
// if ES5-flavoured `Class` helper isn't used
require('reflect-metadata');

const { Inject, Injector, ReflectiveInjector, OpaqueToken } = require('@angular/core');
// or ... = require('injection-js');

const bread = new OpaqueToken;
const cutlet = new OpaqueToken;

class Sandwich {
    constructor(bread, cutlet, injector) {
        const anotherBread = injector.get('bread');

        injector === rootInjector;
        bread === 'bread';
        anotherBread === 'bread';
        cutlet === 'cutlet';
    }
}

Sandwich.parameters = [
    new Inject(bread),
    new Inject(cutlet),
    new Inject(Injector)
];

const rootInjector = ReflectiveInjector.resolveAndCreate([
    { provide: 'bread', useValue: 'bread' },
    { provide: bread, useValue: 'bread' },
    { provide: cutlet, useValue: 'cutlet' },
    Sandwich
]);

const sandwich = rootInjector.get(Sandwich);

Relaterte artikler