从库依赖项创建singleton



我想创建一个依赖于googleauth库的自己类的单例。

您可以创建这样的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;
}
}

我该怎么做?

我找到了答案,下面是代码:

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;
}
}

最新更新