注入已有对象

有时候,应用已经有现有的实例,而不是类,比如引入了一个第三库,这个时候如果希望对象能够被其他 IoC 容器中的实例引用,也可以通过增加对象的方式进行处理。

我们拿常见的 http 请求库 urllib注入已有对象 - 图1 来举例。

假如我们希望在不同的类中来使用,并且不通过 require 的方式,你需要在容器的入口通过 registerobject注入已有对象 - 图2 方法添加这个对象。

在添加的时候需要给出一个 key,方便其他类中注入。

  1. // in global file
  2. import * as urllib from 'urllib';
  3. container.registerobject('httpclient', urllib);

这个时候就可以在任意的类中通过 @inject 来使用了。

  1. @provide()
  2. export class BaseService {
  3. @inject()
  4. httpclient;
  5. async getUser() {
  6. return await this.httpclient.request('/api/getuser');
  7. }
  8. }

TIP

在 midway 中可以在 src/app.ts 中进行添加。