Presupuestador_web/server/src/contexts/common/infrastructure/ContextFactory.ts
2024-04-23 17:29:38 +02:00

37 lines
1023 B
TypeScript

import { IRepositoryManager, RepositoryManager } from "../domain";
import { ISequelizeAdapter, createSequelizeAdapter } from "./sequelize";
// ContextFactory.ts
export interface IContext<T> {
adapter: ISequelizeAdapter;
repositoryManager: IRepositoryManager;
services: T;
}
export class ContextFactory<T> {
private static instances: Map<string, ContextFactory<any>> = new Map();
public static getInstance<T>(constructor: new () => T): ContextFactory<T> {
const key = constructor.name;
if (!ContextFactory.instances.has(key)) {
ContextFactory.instances.set(key, new ContextFactory<T>(constructor));
}
return ContextFactory.instances.get(key)! as ContextFactory<T>;
}
private context: IContext<T>;
private constructor(constructor: new () => T) {
this.context = {
adapter: createSequelizeAdapter(),
repositoryManager: RepositoryManager.getInstance(),
services: new constructor(),
};
}
public getContext(): IContext<T> {
return this.context;
}
}