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