diff --git a/src/server/server.ts b/src/server/server.ts index 06f6eac..b8907ac 100644 --- a/src/server/server.ts +++ b/src/server/server.ts @@ -42,6 +42,7 @@ export abstract class RestServer { this.maxPayloadSizeMB = options.maxPayloadSizeMB!; this.maxUrlEncodedSizeMB = options.maxUrlEncodedSizeMB!; this.log = options.log!; + this.container.register('log', this.log); this.securityHeaders = { ...defaultRestServerOptions.securityHeaders, ...options.securityHeaders, diff --git a/test/spec/di.spec.ts b/test/spec/di.spec.ts index d9e75b8..e33193f 100644 --- a/test/spec/di.spec.ts +++ b/test/spec/di.spec.ts @@ -37,6 +37,44 @@ describe('Dependency injection', () => { await server.stop(); }); + it('should share logger with routes', async () => { + const log = { + fatal: () => {}, + error: () => {}, + warn: () => {}, + info: () => {}, + debug: () => {}, + }; + + class TestEndpoint extends BaseApiEndpoint { + override async handle() { + return {}; + } + } + + class TestRouter extends BaseApiRouter { + override async routes(): Promise { + return [TestEndpoint]; + } + } + + class TestServer extends RestServer { + override router = TestRouter; + } + + const server = new TestServer({ port: 0, log }); + await server.start(); + + const router = server.routerInstance; + const endpoint = router.registeredRoutes[0]; + + expect(server.container.get('log')).toBe(log); + expect(router.container.get('log')).toBe(log); + expect(endpoint.container.get('log')).toBe(log); + + await server.stop(); + }); + it('should allow overriding dependencies at any layer', async () => { class TestEndpoint extends BaseApiEndpoint { override name = 'TestEndpoint';