feat(core): add InversifyJS DI container with auth and content modules

This commit is contained in:
2026-04-06 14:25:26 +02:00
parent 746270eb73
commit c73d4acec9
4 changed files with 79 additions and 0 deletions

View File

@@ -0,0 +1,32 @@
import "reflect-metadata";
import { Container } from "inversify";
import { AuthModule } from "./modules/auth.module.js";
import { ContentModule } from "./modules/content.module.js";
import { DI_RETURN_TYPES, DI_SYMBOLS } from "./types.js";
const ApplicationContainer = new Container({
defaultScope: "Singleton",
});
export const initializeContainer = () => {
ApplicationContainer.load(AuthModule);
ApplicationContainer.load(ContentModule);
};
export const destroyContainer = () => {
ApplicationContainer.unload(AuthModule);
ApplicationContainer.unload(ContentModule);
};
if (process.env.NODE_ENV !== "test") {
initializeContainer();
}
export function getInjection<K extends keyof typeof DI_SYMBOLS>(
symbol: K
): DI_RETURN_TYPES[K] {
return ApplicationContainer.get(DI_SYMBOLS[symbol]);
}
export { ApplicationContainer };

View File

@@ -0,0 +1,16 @@
import { ContainerModule, interfaces } from "inversify";
import type { IUsersRepository } from "@/application/repositories/users.repository.interface.js";
import type { IAuthenticationService } from "@/application/services/auth.service.interface.js";
import { MockUsersRepository } from "@/infrastructure/repositories/mock-users.repository.js";
import { MockAuthenticationService } from "@/infrastructure/services/mock-auth.service.js";
import { DI_SYMBOLS } from "../types.js";
const initializeModule = (bind: interfaces.Bind) => {
bind<IUsersRepository>(DI_SYMBOLS.IUsersRepository).to(MockUsersRepository);
bind<IAuthenticationService>(DI_SYMBOLS.IAuthenticationService).to(
MockAuthenticationService
);
};
export const AuthModule = new ContainerModule(initializeModule);

View File

@@ -0,0 +1,13 @@
import { ContainerModule, interfaces } from "inversify";
import type { IArticlesRepository } from "@/application/repositories/articles.repository.interface.js";
import { MockArticlesRepository } from "@/infrastructure/repositories/mock-articles.repository.js";
import { DI_SYMBOLS } from "../types.js";
const initializeModule = (bind: interfaces.Bind) => {
bind<IArticlesRepository>(DI_SYMBOLS.IArticlesRepository).to(
MockArticlesRepository
);
};
export const ContentModule = new ContainerModule(initializeModule);

View File

@@ -0,0 +1,18 @@
import type { IAuthenticationService } from "@/application/services/auth.service.interface.js";
import type { ITelemetryService } from "@/application/services/telemetry.service.interface.js";
import type { IUsersRepository } from "@/application/repositories/users.repository.interface.js";
import type { IArticlesRepository } from "@/application/repositories/articles.repository.interface.js";
export const DI_SYMBOLS = {
IAuthenticationService: Symbol.for("IAuthenticationService"),
ITelemetryService: Symbol.for("ITelemetryService"),
IUsersRepository: Symbol.for("IUsersRepository"),
IArticlesRepository: Symbol.for("IArticlesRepository"),
};
export interface DI_RETURN_TYPES {
IAuthenticationService: IAuthenticationService;
ITelemetryService: ITelemetryService;
IUsersRepository: IUsersRepository;
IArticlesRepository: IArticlesRepository;
}