https://github.com/anyversion/anydi
基于 Typescript DI 实现。
https://github.com/anyversion/anydi
injection oop
Last synced: 4 months ago
JSON representation
基于 Typescript DI 实现。
- Host: GitHub
- URL: https://github.com/anyversion/anydi
- Owner: AnyVersion
- Created: 2024-10-10T01:47:46.000Z (about 1 year ago)
- Default Branch: main
- Last Pushed: 2024-10-14T03:46:42.000Z (about 1 year ago)
- Last Synced: 2025-07-04T13:09:10.688Z (5 months ago)
- Topics: injection, oop
- Language: TypeScript
- Homepage:
- Size: 26.4 KB
- Stars: 2
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
### AnyDI
## Install
```
$ npm install anydi --save
```
## Usage
```ts
import { Container, Destroy, Inject, Lazy, DiContainer, Service, Root, setConfig } from "../src"
setConfig({ defaultLazy: true })
@Service()
class ChildValue {
static id = 0
id = ChildValue.id++
constructor() {
console.log('Child value:', this.id)
}
@Destroy
destroy() {
console.log('Child value destroy:', this.id)
}
}
@Service()
class Child {
@Lazy() value!: ChildValue
constructor() {
console.log('Child init')
}
@Destroy
destroy() {
console.log('Child destroy')
}
}
@Container()
@Service()
class Test2 {
@Inject() child!: Child
}
@Service()
class Test3 {
@Inject() value!: ChildValue
}
@Root()
@Service()
class Test {
@Inject() private test2!: Test2
@Inject() private test3!: Test3
@Inject() private value!: ChildValue
constructor() {
console.log(this.test2.child.value.id)
console.log(this.test3)
console.log(this.value.id === this.test3.value.id, this.value.id !== this.test2.child.value.id)
}
@Destroy
destroy() {
console.log('Test destroy')
}
}
const test = new Test
test.destroy()
// or without @Root
const test2 = new DiContainer().factory(Test) // or new DiContainer().track(() => new Test)
test2.destroy()
```
## changelog