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);
