feat(marketing-pages): add per-feature InversifyJS container
This commit is contained in:
33
packages/marketing-pages/src/di/container.test.ts
Normal file
33
packages/marketing-pages/src/di/container.test.ts
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
import { afterEach, beforeEach, describe, expect, it } from "vitest";
|
||||||
|
import { marketingPagesContainer } from "./container";
|
||||||
|
import { MARKETING_PAGES_SYMBOLS } from "./symbols";
|
||||||
|
import { MarketingPagesModule } from "./module";
|
||||||
|
import { MockPagesRepository } from "@/infrastructure/repositories/mock-pages.repository";
|
||||||
|
import { MockSiteSettingsRepository } from "@/infrastructure/repositories/mock-site-settings.repository";
|
||||||
|
import type { IPagesRepository } from "@/application/repositories/pages-repository.interface";
|
||||||
|
import type { ISiteSettingsRepository } from "@/application/repositories/site-settings-repository.interface";
|
||||||
|
|
||||||
|
describe("marketingPagesContainer", () => {
|
||||||
|
beforeEach(() => {
|
||||||
|
marketingPagesContainer.unbindAll();
|
||||||
|
marketingPagesContainer.load(MarketingPagesModule);
|
||||||
|
});
|
||||||
|
|
||||||
|
afterEach(() => {
|
||||||
|
marketingPagesContainer.unbindAll();
|
||||||
|
});
|
||||||
|
|
||||||
|
it("resolves IPagesRepository to MockPagesRepository", () => {
|
||||||
|
const repo = marketingPagesContainer.get<IPagesRepository>(
|
||||||
|
MARKETING_PAGES_SYMBOLS.IPagesRepository,
|
||||||
|
);
|
||||||
|
expect(repo).toBeInstanceOf(MockPagesRepository);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("resolves ISiteSettingsRepository to MockSiteSettingsRepository", () => {
|
||||||
|
const repo = marketingPagesContainer.get<ISiteSettingsRepository>(
|
||||||
|
MARKETING_PAGES_SYMBOLS.ISiteSettingsRepository,
|
||||||
|
);
|
||||||
|
expect(repo).toBeInstanceOf(MockSiteSettingsRepository);
|
||||||
|
});
|
||||||
|
});
|
||||||
8
packages/marketing-pages/src/di/container.ts
Normal file
8
packages/marketing-pages/src/di/container.ts
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
import "reflect-metadata";
|
||||||
|
import { Container } from "inversify";
|
||||||
|
import { MarketingPagesModule } from "./module";
|
||||||
|
|
||||||
|
export const marketingPagesContainer = new Container({
|
||||||
|
defaultScope: "Singleton",
|
||||||
|
});
|
||||||
|
marketingPagesContainer.load(MarketingPagesModule);
|
||||||
18
packages/marketing-pages/src/di/module.ts
Normal file
18
packages/marketing-pages/src/di/module.ts
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
import { ContainerModule, type interfaces } from "inversify";
|
||||||
|
|
||||||
|
import type { IPagesRepository } from "../application/repositories/pages-repository.interface";
|
||||||
|
import type { ISiteSettingsRepository } from "../application/repositories/site-settings-repository.interface";
|
||||||
|
import { MockPagesRepository } from "../infrastructure/repositories/mock-pages.repository";
|
||||||
|
import { MockSiteSettingsRepository } from "../infrastructure/repositories/mock-site-settings.repository";
|
||||||
|
import { MARKETING_PAGES_SYMBOLS } from "./symbols";
|
||||||
|
|
||||||
|
export const MarketingPagesModule = new ContainerModule(
|
||||||
|
(bind: interfaces.Bind) => {
|
||||||
|
bind<IPagesRepository>(MARKETING_PAGES_SYMBOLS.IPagesRepository).to(
|
||||||
|
MockPagesRepository,
|
||||||
|
);
|
||||||
|
bind<ISiteSettingsRepository>(
|
||||||
|
MARKETING_PAGES_SYMBOLS.ISiteSettingsRepository,
|
||||||
|
).to(MockSiteSettingsRepository);
|
||||||
|
},
|
||||||
|
);
|
||||||
4
packages/marketing-pages/src/di/symbols.ts
Normal file
4
packages/marketing-pages/src/di/symbols.ts
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
export const MARKETING_PAGES_SYMBOLS = {
|
||||||
|
IPagesRepository: Symbol.for("marketing-pages:IPagesRepository"),
|
||||||
|
ISiteSettingsRepository: Symbol.for("marketing-pages:ISiteSettingsRepository"),
|
||||||
|
} as const;
|
||||||
Reference in New Issue
Block a user