喷出器
用于JavaScript/TypeScript(有JSDoc支持)的轻量级,有机型依赖性注射容器,以类型推论支持类和功能依赖性.
特征
- 类型推论: 自动推断依赖类型
- 类函数支持( F): 从类或工厂函数登记实例
- 处理错误: 为未注册的依赖性丢出清晰的错误
- 无依赖:小脚印(小于1KB)
安装
npm install "@collidor/injector"
使用量
基本类示例
import { Injector } from '"@collidor/injector"';
// Create injector
const injector = new Injector();
// Register a class instance
class DatabaseService {
connect() { return 'Connected!'; }
}
injector.register(DatabaseService, new DatabaseService());
// Inject the instance (type inferred as DatabaseService)
const db = injector.inject(DatabaseService);
console.log(db.connect()); // "Connected!"
函数依赖性示例
// Register a factory function
const configFactory = () => ({ env: 'production' });
injector.register(configFactory, configFactory());
// Inject the function result (type inferred as { env: string })
const config = injector.inject(configFactory);
console.log(config.env); // "production"
在类属性中注册 :
import {Database} from './database.ts'
class Service {
private database = inject(Database)
getData() {
return this.database.query();
}
}
相互依存或种族条件
如果在除构造器以外的任何地方,有两个类互相依赖,我们可以使用得到器或直接在方法中获取实例:
import {Database} from './database.ts'
class Service {
get database(): Database {
return inject(Database);
}
getData() {
return this.database.query();
}
}
处理错误
try {
injector.inject(UnregisteredService); // Throws error
} catch (err) {
console.error(err.message); // "No instance registered for type: UnregisteredService"
}
API 密码
Injector
register(type, instance)
- 参数数字 :
type: 构造器 QQ 函数 QQ 符号 QQ 对象( 依赖性标识符)instance: 要存储的值
- 回返数字 :
void
登记依赖性实例.
inject(type)
- 参数数字 :
type: 构造器 QQ 函数 QQ 符号 QQ 对象( 依赖性标识符)
- 回返数字 :
T extends Type<infer M> ? M : T extends (...args: any[]) => infer R ? R : any - 掷出: 没有注册实例时出错
type
获取依赖性实例.
类型推论
具有阶级建筑师和工厂功能的工程:
// Class registration
class AuthService {
login() { /* ... */ }
}
injector.register(AuthService, new AuthService());
const auth = injector.inject(AuthService); // Inferred as AuthService
// Function registration
const loggerFactory = () => ({ log: (msg: string) => console.log(msg) });
injector.register(loggerFactory, loggerFactory());
const logger = injector.inject(loggerFactory); // Inferred as { log: (msg: string) => void }
捐款
- 叉子存储器
- 创建特性分支
- 提交拉动请求
许可证
麻省理工学院