37 lines
1023 B
TypeScript
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;
|
|
}
|
|
}
|