Skip to content

Commit

Permalink
fix(injector): allow exporting provider objects
Browse files Browse the repository at this point in the history
ref #425
  • Loading branch information
marcj committed Oct 3, 2023
1 parent 00af116 commit 76ec217
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 3 deletions.
6 changes: 3 additions & 3 deletions packages/injector/src/module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ export interface PreparedProvider {
function lookupPreparedProviders(preparedProviders: PreparedProvider[], token: Token): PreparedProvider | undefined {
let last: PreparedProvider | undefined;
for (const preparedProvider of preparedProviders) {
if (token === preparedProvider.token) {
if (token === preparedProvider.token || preparedProvider.providers.includes(token)) {
last = preparedProvider;
} else if (isType(token)) {
if (token.kind === ReflectionKind.any || token.kind === ReflectionKind.unknown) continue;
Expand Down Expand Up @@ -417,7 +417,7 @@ export class InjectorModule<C extends { [name: string]: any } = any, IMPORT = In
}

/**
* Prepared the module for a injector tree build.
* Prepared the module for an injector tree build.
*
* - Index providers by token so that last known provider is picked (so they can be overwritten).
* - Register TagProvider in TagRegistry
Expand Down Expand Up @@ -496,7 +496,7 @@ export class InjectorModule<C extends { [name: string]: any } = any, IMPORT = In
//we add our module as additional source for potential dependencies
registerPreparedProvider(parentProviders, preparedProvider.modules, preparedProvider.providers, false);
} else {
parentProviders.push({ token, modules: [this], providers: preparedProvider.providers.slice() });
parentProviders.push({ token: preparedProvider.token, modules: [this], providers: preparedProvider.providers.slice() });
}
};

Expand Down
28 changes: 28 additions & 0 deletions packages/injector/tests/injector2.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1485,3 +1485,31 @@ test('split configuration into multiple types', () => {
const service = injector.get(Service);
expect(service.dbConfig.host).toBe('localhost');
});

test('empty interface provider', () => {
interface Test {
}

const TEST = {};

const Test = provide<Test>({ useValue: TEST });
const rootModule = new InjectorModule([Test]);
const injector = new InjectorContext(rootModule);
const service = injector.get<Test>();
expect(service).toBe(TEST);
});

test('export provider', () => {
interface Test {
}

const TEST = {};

const Test = provide<Test>({ useValue: TEST });
const module = new InjectorModule([Test]).addExport(Test);

const rootModule = new InjectorModule().addImport(module);
const injector = new InjectorContext(rootModule);
const service = injector.get<Test>();
expect(service).toBe(TEST);
});

0 comments on commit 76ec217

Please sign in to comment.