
Security News
NVD Concedes Inability to Keep Pace with Surging CVE Disclosures in 2025
Security experts warn that recent classification changes obscure the true scope of the NVD backlog as CVE volume hits all-time highs.
@searchfe/inject-js
Advanced tools
一个极简的 TypeScript 依赖注入框架。https://searchfe.github.io/inject-js/
使用 npm 来安装:
npm install --save @searchfe/inject-js
inject-js 需要 Reflect Metadata 来在运行时决定依赖类型,你的 tsconfig.json
需要包含以下的设置:
{
"compilerOptions": {
"experimentalDecorators": true,
"emitDecoratorMetadata": true
}
}
另外因为该库依赖 Reflect 的使用,确保运行时存在 Reflect API 的 Polyfill,比如以下之一:
以下是一些使用案例,更多细节请参考 API 文档。
用 @injectable
来装饰一个 Service,这样 inject-js 就可以(借由 metadata)得知它的依赖并在运行时注入。
// car.ts
import { injectable } from 'inject-js';
import { Wheel } from './wheel';
@injectable
export class Car {
constructor(private wheel: Wheel) {}
}
// wheel.ts
import { injectable } from 'inject-js';
@injectable
export class Wheel {
constructor() {}
}
// index.ts 应用入口
import { Container } from 'inject-js';
import { Car } from './car';
import { Wheel } from './wheel;
const di = new Container();
di.addService(Car);
di.addService(Wheel);
const car = di.create(Car);
用 @inject(token)
来装饰一个依赖(构造参数),来指定被注入的类。token
即为当前容器内 Provider 的唯一标识。
用于没有 Service 声明的场景(只有 Provider),或者没有 Metadata API 支持的场景。
也就是说借此可以在 JavaScript 代码中使用 inject-js。
import { inject } from 'inject-js';
import { Wheel } from './wheel';
@injectable
export class Car {
constructor(@inject('Wheel') private wheel: Wheel) {}
}
// index.ts 应用入口
import { Container } from 'inject-js';
import { Car } from './car';
import { Wheel } from './wheel';
const di = new Container();
di.addService('Wheel', Wheel);
di.addService(Car);
const car = di.create(Car);
如果 Container 实例就在定义 Service 的上下文中,可以用 @service 装饰器来直接注册:
const container = new Container();
@service(container)
class FooService {}
// 相当于:
const container = new Container();
@injectable
class FooService {}
container.addService(FooService)
Container 会维护一个 Providers 集合,以及每个 Provider 对应的 Token。需要创建实例时,会根据 Token 查找对应的 Provider 并进行创建。 我们提供了如下几种注册 Provider 的方式:
.create(): Service
方法的 Provider 类(工厂类),其余注册方式都是用 addProvider 实现的。在 demo 下包含了一个使用 inject-js 的示例。可以按以下步骤执行该示例:
npm install && npm run build
。npm run demo
。FAQs
A Dependency Injection library
The npm package @searchfe/inject-js receives a total of 162 weekly downloads. As such, @searchfe/inject-js popularity was classified as not popular.
We found that @searchfe/inject-js demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 16 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Security experts warn that recent classification changes obscure the true scope of the NVD backlog as CVE volume hits all-time highs.
Security Fundamentals
Attackers use obfuscation to hide malware in open source packages. Learn how to spot these techniques across npm, PyPI, Maven, and more.
Security News
Join Socket for exclusive networking events, rooftop gatherings, and one-on-one meetings during BSidesSF and RSA 2025 in San Francisco.