유형 스크립트의 Angular2 DI.node.js / non-angular 프로젝트에서 사용할 수 있습니까?
angular2 의존성 주입 컨테이너는 독립적인 사용을 위해 설계되었으며, 타입스크립트/javascript 서버 측 애플리케이션에 사용할 수 있습니까?
저는 10월 16일 (https://github.com/angular/di.js/issues/108) 에서 v2로 만들기로 했던 프로젝트에 대한 이슈를 오픈했습니다.분명히 이것은 불가능했습니다.새로운 angular2di는 어떻게 된 거죠? js / es6 / ts 프로젝트에서 독립 실행형으로 사용할 수 있나요?
누군가가 최근(2017년 1월) Angular2에서 프레임워크 외부에서 사용할 수 있는 종속성 주입을 추출한 것 같습니다.
https://github.com/mgechev/injection-js
Angular 2 RC.5에서 DI는 다음의 일부입니다.@angular/core
꾸러미각도가 아닌 용도의 경우 최근에 추출되었습니다.injection-js
Angular 팀의 멤버인 Minko Gechev의 패키지.
다음은 짧은 ES6 노드 친화적인 예입니다.
// 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);
의심스럽군요, 구성 요소로 추출된 것 같지는 않습니다.Angular와 같은 주요 프레임워크가 여전히 이러한 단일화된 접근 방식을 가지고 있다는 것이 조금 아쉽습니다. Symfony와 같은 구성 요소 지향 프레임워크를 보고 싶지만 JavaScript는 아직 그렇게 되지 않았습니다.
그동안 당신은 Inversify를 가지고 있습니다.나쁘지 않아 보이는 JS.
현재 Angular 2.0 DI 코드는 다른 라이브러리에서 사용할 준비가 되어 있지 않은 것 같습니다.
저는 대안을 제시하고 싶습니다.저는 Inversify라는 IoC 컨테이너를 개발했습니다.상황에 맞는 바인딩과 같은 고급 종속성 주입 기능을 갖춘 JS.노드와 브라우저 모두에서 작동하며 API의 일부는 Angular 2 DI API를 기반으로 합니다.
사용하려면 다음 3가지 기본 단계를 수행해야 합니다.
주석 추가
주석 API는 Angular 2.0을 기반으로 합니다.
import { injectable, inject } from "inversify";
@injectable()
class Katana implements IKatana {
public hit() {
return "cut!";
}
}
@injectable()
class Shuriken implements IShuriken {
public throw() {
return "hit!";
}
}
@injectable()
class Ninja implements INinja {
private _katana: IKatana;
private _shuriken: IShuriken;
public constructor(
@inject("IKatana") katana: IKatana,
@inject("IShuriken") shuriken: IShuriken
) {
this._katana = katana;
this._shuriken = shuriken;
}
public fight() { return this._katana.hit(); };
public sneak() { return this._shuriken.throw(); };
}
바인딩 선언
바인딩 API는 Ninject에 기반입니다.
import { Kernel } from "inversify";
import { Ninja } from "./entities/ninja";
import { Katana } from "./entities/katana";
import { Shuriken} from "./entities/shuriken";
var kernel = new Kernel();
kernel.bind<INinja>("INinja").to(Ninja);
kernel.bind<IKatana>("IKatana").to(Katana);
kernel.bind<IShuriken>("IShuriken").to(Shuriken);
export default kernel;
종속성 해결
해상도 API는 Ninject를 기반으로 합니다.
import kernel = from "./inversify.config";
var ninja = kernel.get<INinja>("INinja");
expect(ninja.fight()).eql("cut!"); // true
expect(ninja.sneak()).eql("hit!"); // true
최신 릴리스(2.0.0)는 다음과 같은 많은 사용 사례를 지원합니다.
- 범용 JavaScript(Node.js 및 브라우저에서 작동)
- 커널 모듈
- 커널 미들웨어
- 종속성 식별자로 클래스, 문자열 리터럴 또는 기호 사용
- 상수 값 주입
- 클래스 생성자 주입
- 공장투입
- 자동차 공장
- 공급자 주입(비동기화 공장)
- 활성화 처리기(프록시 주입에 사용됨)
- 다중 주사
- 태그가 지정된 바인딩
- 사용자 지정 태그 장식기
- 명명된 바인딩
- 상황에 맞는 바인딩
- 우호적인 예외(예: 순환 종속성)
자세한 내용은 https://github.com/inversify/InversifyJS 에서 확인할 수 있습니다.
유비쿼터스 소스를 확인하세요 - 그는 백엔드에서 어떻게든 각도 2의 DI를 통합했습니다.
typescript 및 node.js typedi에 대한 간단하지만 강력하고 통증이 없는 종속성 주입 도구를 원하는 경우.각진 프런트 엔드에도 잘 어울립니다.또한 이 작성자의 다른 리포지토리를 확인해 보면 TypeScript를 사용하여 노드 응용 프로그램을 구축하는 데 도움이 되는 구성 요소가 많이 있습니다.
Angular DI의 멋진 포트가 있습니다: https://github.com/mgechev/injection-js
언급URL : https://stackoverflow.com/questions/34454481/angular2-di-in-typescript-can-we-use-it-in-node-js-non-angular-projects
'bestsource' 카테고리의 다른 글
Oracle 열에 대한 자동 수정 타임스탬프 유형이 있습니까? (0) | 2023.06.13 |
---|---|
SQL에서 소수점 이하 두 자리로 반올림 (0) | 2023.06.13 |
Excel(VBA)에서 고급 필터를 적용한 후 표시되는 행의 범위를 가져오는 방법 (0) | 2023.06.13 |
gg 그림에 회귀선 추가 (0) | 2023.06.13 |
TS가 모듈을 찾을 수 없음 (0) | 2023.06.13 |