从库依赖项创建单例

时间:2021-04-19 07:54:32

标签: typescript

我想创建一个我自己的类的单例,它依赖于 google-auth-library。

您可以像这样创建一个 oauthClient:

import { OAuth2Client } from "google-auth-library";

const OAuth2 = google.auth.OAuth2;

const getOauthClient = (
  clientId: string,
  clientSecret: string,
  redirectUrl: string
): OAuth2Client => {
  return new OAuth2(clientId, clientSecret, redirectUrl);
};

因此,我试图添加这个实例,如果您将 getOauthClient 调用到我的 OauthClient 类中,它将被创建,如下所示:

class OauthClient{
  constructor(
    clientId: string,
    clientSecret: string,
    redirectUrl: string
  ){
    if(OauthClient._instance){
      throw new Error("Cannot initialize singleton class using new");
    }
  }

  private static _instance: OauthClient = getOauthClient(clientId, clientSecret, redirectUrl);

  public static get instance(): OauthClient{
    return OauthClient._instance;
  }
}

我该怎么做?

1 个答案:

答案 0 :(得分:0)

我找到了答案,代码如下:

import { OAuth2Client } from "google-auth-library";

const OAuth2 = google.auth.OAuth2;

class OauthClient{
  constructor() {
    throw new Error(
      "Cannot initialize singleton class using new. Use OauthClient.getInstance instead"
    );
  }

  private static instance: OauthClient;

  public static getInstance(
    clientId: string,
    clientSecret: string,
    redirectUrl: string
  ): OauthClient {
    if(!OauthClient.instance){
      this.instance = new OAuth2(
        clientId,
        clientSecret,
        redirectUrl
      );
    }
    return OauthClient.instance;
  }
}

相关问题