@vert/core
Version:
Library to build OOP applications which are based on Vue.
130 lines (105 loc) • 2.58 kB
Markdown
# Use injector.
Injector is something to create instance of your classes.
Classes in same injector can reference each other by using injection.
```typescript
// Your services.
import { Injectable } from '@vert/core'
class Logger {
// ...
}
class Http {
// ...
constructor (
private logger: Logger
) {}
}
class BookshelfService {
// ...
constructor (
private http: Http,
private logger: Logger
) {}
}
class UserService {
// ...
constructor (
private http: Http,
private logger: Logger
) {}
}
export {
BookshelfService,
Http,
Logger,
UserService
}
```
```typescript
// Using injector.
import { Injector } from '@vert/core'
import { BookshelfService, Http, Logger, UserService } from './services'
// Create an injector.
const injector = Injector.create()
injector.addTransient(BookshelfService, Http, Logger, UserService)
// Get instances.
const bookshelfSrv = injector.get(BookshelfService)
const userSrv = injector.get(UserService)
```
You can register your service as transient-service or singleton-service:
```typescript
injector
.addTransient(BookshelfService)
.addSingleton(UserService)
const bookshelfSrv1 = injector.get(BookshelfService)
const bookshelfSrv2 = injector.get(BookshelfService)
bookshelfSrv1 === bookshelfSrv2 // false
const userSrv1 = injector.get(UserService)
const userSrv2 = injector.get(UserService)
userSrv1 === userSrv2 // true
```
## API
```typescript
/**
* Standalone injector class.
*/
class Injector {
/**
* Create a new class injector.
*
* @return {Injector}
*/
static create (): Injector
/**
* Register target as a singleton provider.
* You will get the same instance in every single initialization.
*
* @param {TConstructor} Provider
*/
addSingleton (Provider: TConstructor): this
/**
* Register target as transient provider.
* You will get different instances in every single initialization.
*
* @param {TConstructor} Provider
*/
addTransient <T> (Provider: TConstructor): this
/**
* Get target instance from injector by providing provider.
*
* @param {{new(...args): T}} Provider
* @return {T}
*/
get <T> (Provider: new (...args: any[]) => T): T
/**
* Check whether injector has registered this provider.
*
* @param target
*/
has (target: TConstructor): boolean
private constructor ()
}
```