Skip to content

本库 API 和 inversify API 的对比

Container

本库和 inversify 都使用 Container。 历史版本中本库参考 Angular 使用 Injector 作为服务的容器,新版本改为 Container。

本库只实现了 inversify 中 Container 的部分方法。已经实现的方法绝大多数应该是和 inversify 等效的。确定的只有 onActivation 和 onDeactivation 的接口定义发生了变化。

Token

对应 inversify 的 ServiceIdentifier。

inversify 中没有对 ServiceIdentifier 类型做太多限制,基本上任何 js 变量都可以作为 ServiceIdentifier,常见的有字符串和 Symbol,以及 class 类。

本库中的 Token 实例基本上对应 inversify 中的字符串和 Symbol。

本库也支持直接把 class 类作为 ServiceIdentifier。

实际上本库只支持 Token 实例和 class 类作为 ServiceIdentifier,是因为这样可以方便 ide 自动推导类型。

LazyToken

inversify 的 LazyServiceIdentifier

@Inject

inversify 的 inject

@Optional

inversify 的 optional

@Self

inversify 没有提供 @Self 装饰器

本库是借鉴的 Angular 中的@Self 这个 API

@SkipSelf

inversify 没有提供 @SkipSelf 装饰器

本库是借鉴的 Angular 中的@SkipSelf 这个 API

@PostConstruct

inversify 的 postConstruct

@PreDestroy

inversify 的 preDestroy

装饰器采用首字母大写风格

其实严格来说,装饰器也只是一个普通的函数,首字母应该小写。

但是这里借鉴了 Angular 中的命名风格,采用首字母大写。

主要还是个人偏好。

decorate

inversify 的 decorate

主要用于在 javascript 项目中手动使用装饰器函数。

@LazyInject 和 createLazyInject

inversify 本身没有提供相应的方法,但是第三方库 提供了类似的方法。实际上本库也是参考的这个开源库的实现。

该三方库只提供了getDecorators方法,类似本库的createLazyInject方法。

相关细节参考这里