1.0.3 • Published 4 years ago

zego-injector v1.0.3

Weekly downloads
2
License
ISC
Repository
github
Last release
4 years ago

zego nodejs端的Injector工具

注意Inject的对象是全局唯一的

Factory.createConstructor 直接创建一个实例/如果已经被创建 则直接返回. 注意传入的class必须被@Injectable

Factory.getInstance 检查当前模块是否已经被实例化过,如果已经实例化过就直接返回实例 否则返回null

使用方法

import { Factory, Injectable } from 'zego-injector'

@Injectable() class TestInjectA{ sayBy(){ return "By" } } @Injectable() class TestInjectB{ constructor(private testA:TestInjectA){} log(){ const testASay = this.testA.sayBy() console.log(testASay) } }

Factory.createConstructor(TestInjectB).log() Factpry.getInstance(TestInjectB).log()

> ## Factory.createFactory 根据你传递的function返回的结果 当作实例. 这样其他地方也可以拿到当前实例
> ### 使用方法

import { Factory, Injectable } from 'zego-injector'

@Injectable() class TestInjectA{ sayBy(){ return "By" } }

const instance = Factory.createFactory( // 你需要传递的方法 必须返回一个结果 用于当作实例 function (testA:TestInjectA){ return testA.sayBy() }, // 你的key 方便其他地方可以根据key inject到你 "MYTEST", // 你需要依赖的对象 传递给你的function TestInjectA )

console.log(instance)

> ## Factory.create 是Factory.createConstructor 与 Factory.createFactory的集合 动态判断需要哪种创建方式
> ## Factory.useValue 注册一个module
> ### 使用方法

import { Factory, Injectable } from 'zego-injector' class TestValueA{ sayBy(){ return "By" } }

// 注册一个module Factory.useValue({ useValue:new TestValueA(), // 你的key 方便其他地方可以根据key inject到你 provide:"MYVALUE" })

console.log(Factory.create("MYVALUE").sayBy())

> ## Factory.useFactory 根据你传递的Function 注册一个module
> ### 使用方法

import { Factory, Injectable } from 'zego-injector' @Injectable() class TestFactoryA{ sayBy(){ return "By" } }

Factory.useFactory({ useFactory(testA:TestFactoryA){ return testA }, inject:TestFactoryA, provide:"MYFACTORY" })

console.log(Factory.create("MYFACTORY").sayBy())

> ## Factory.useClass 给一个@Injectable的class 进行别名
> ### 使用方法

@Injectable() class TestClassA{ sayBy(){ return "By" } }

// 定义一个module 这时候是不会创建的 Factory.useClass({ // 必须是@Injectable useClass:TestClassA, // 你的key 方便其他地方可以根据key inject到你 provide:"MYCLASS" })

expect(Factory.create("MYCLASS").sayBy()).toBe("By")

const GetMyClass = function (){ return createParamDecorator({ factory(myclass:any){ return myclass }, inject:"MYCLASS" }) }

@Injectable() class TestClassB{ log( @GetMyClass() myclass:any ){ return myclass.sayBy() } }

console.log(Factory.create("TestClassB").log())