Проблема с инициализацией синглтона
У меня есть класс CartService
, который должен работать как синглтон, но с возможностью передачи параметра при создании:
var CART_ITEMS_KEY = 'SOME_KEY';
export class CartService {
private static instance: CartService;
private items: CartItem[] = [];
private authService: AuthService;
private apiService: APIService;
private endpoint: AxiosInstance;
constructor(cartItemsKey) {
CART_ITEMS_KEY = cartItemsKey;
this.authService = AuthService.getInstance();
this.apiService = APIService.getInstance();
this.endpoint = this.apiService.createEndpoint('cart');
this.initialize();
}
public static getInstance(): CartService {
if (!CartService.instance) {
CartService.instance = new CartService();
}
return CartService.instance;
}
}
Также у меня есть хук для работы с сервисами:
import { useMemo } from 'react';
export function useService<T>(service: { new (): T; getInstance(): T }): T {
return useMemo<T>(() => service.getInstance(), []);
}
export function useClass<S, A extends []>(Class: { new (...args: A): S }, ...args: A): S {
return useMemo<S>(() => new Class(...args), []);
}
Я хочу инициализировать CartService
с параметром и использовать его в useService
так:
useService(CartService("SOME_NEW_KEY"))
Но пробуя разные подходы, я сталкиваюсь с ошибками. Как правильно реализовать синглтон с условным параметром?