Dioma 依赖注入容器使用教程
项目介绍
Dioma 是一个优雅的依赖注入容器,适用于 vanilla JavaScript 和 TypeScript。它旨在简化依赖管理,提供了一种简单的方式来注册和注入依赖项。Dioma 支持单例和瞬态作用域,并且具有分层的容器结构,使得依赖查找更加灵活。
项目快速启动
安装
你可以通过 npm 或 yarn 安装 Dioma:
npm install --save dioma
# 或者
yarn add dioma
基本用法
以下是一个简单的示例,展示了如何使用 Dioma 进行依赖注入:
import { inject, Scopes } from "dioma";
class Garage {
open() {
console.log("garage opened");
}
// 单例作用域
static scope = Scopes.Singleton();
}
class Car {
// 注入 Garage 实例
constructor(private garage = inject(Garage)) {}
park() {
this.garage.open();
console.log("car parked");
}
}
const car = new Car();
car.park(); // 输出: garage opened, car parked
应用案例和最佳实践
单例作用域
单例作用域确保在整个应用程序中只有一个实例:
class Database {
static scope = Scopes.Singleton();
// 数据库连接逻辑
}
const db1 = inject(Database);
const db2 = inject(Database);
console.log(db1 === db2); // true
瞬态作用域
瞬态作用域每次都会创建一个新的实例:
class Logger {
static scope = Scopes.Transient();
// 日志记录逻辑
}
const logger1 = inject(Logger);
const logger2 = inject(Logger);
console.log(logger1 === logger2); // false
分层容器
Dioma 支持分层容器结构,可以在不同的容器中注册和管理依赖:
import { Container, Scopes } from "dioma";
const parentContainer = new Container(null, "Parent");
const childContainer = parentContainer.childContainer("Child");
class ParentClass {
static scope = Scopes.Container();
}
class ChildClass {
static scope = Scopes.Container();
}
parentContainer.register({ class: ParentClass });
childContainer.register({ class: ChildClass });
const parentInstance = childContainer.inject(ParentClass); // 从父容器获取实例
const childInstance = childContainer.inject(ChildClass); // 从子容器获取实例
典型生态项目
Dioma 可以与许多其他 JavaScript 和 TypeScript 项目集成,例如:
- Express.js: 用于构建 Web 应用程序。
- TypeORM: 用于数据库操作。
- Jest: 用于单元测试。
通过将 Dioma 与这些项目结合使用,可以进一步提高代码的可维护性和可测试性。
通过以上教程,你应该能够快速上手并使用 Dioma 进行依赖注入。希望你能发现 Dioma 在项目开发中的价值和便利性。