はじめに
シンプルにDIがやりたかった。
DIコンテナつくる
Dependencies.ts
type Class<T> = new() => T
export default class Dependencies {
static container: Map<Class<any>, any> = new Map()
static inject<T>(clazz: Class<T>): T {
const instance = Dependencies.container.get(clazz)
if (instance) {
return instance
}
const newInstance = new clazz()
Dependencies.container.set(clazz, newInstance)
return newInstance
}
}
使う
import Dependencies from "./Dependencies";
class Test {} // Singletonにしたいクラス
const val1 = Dependencies.inject(Test)
const val2 = Dependencies.inject(Test)
console.log(val1 === val2) // true