На данный момент код Angular 2.0 DI не кажется готовым для использования другими библиотеками.
Хочу предложить альтернативу. Я разработал контейнер IoC под названием InversifyJS с расширенными функциями внедрения зависимостей, такими как контекстные привязки. Он работает как в узле, так и в браузерах, а некоторые части его API основаны на Angular 2 DI API.
Чтобы использовать его, вам необходимо выполнить 3 основных шага:
1. Добавьте аннотации
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(); };
}
2. Объявить привязки
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;
3. Устранение зависимостей.
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 и браузерах)
- Модули ядра
- ПО промежуточного слоя ядра
- Используйте классы, строковые литералы или символы в качестве идентификаторов зависимостей
- Введение постоянных значений
- Внедрение конструкторов классов
- Инъекция заводов
- Автозавод
- Инъекция провайдеров (асинхронная фабрика)
- Обработчики активации (используются для внедрения прокси)
- Мульти инъекции
- Tagged bindings
- Пользовательские декораторы тегов
- Именованные привязки
- Контекстные привязки
- Дружественные исключения (например, круговые зависимости)
Подробнее об этом можно узнать на странице https://github.com/inversify/InversifyJS.
person
Remo H. Jansen
schedule
13.08.2016
It is not easy to use it as standalone atm and there is no documentation for such setup. There is a plan to extract DI library from the **angular2** repo in the future, but this is not the case today.
Также, хорошая шляпа! - person 0xcaff   schedule 25.12.2015