diff --git a/README.md b/README.md index 366e017..436d6c3 100644 --- a/README.md +++ b/README.md @@ -453,6 +453,8 @@ To set up your development environment: [Back to top](#table-of-contents) ## Change History +* v1.6.2 (2018-11-22) + * Create DI with providers for queues and exchanges * v1.6.1 (2018-11-14) * force_json_decode is now true by default * v1.6.0 (2018-10-31) diff --git a/package-lock.json b/package-lock.json index 7346343..80fc63b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "@hapiness/rabbitmq", - "version": "1.6.1", + "version": "1.6.2", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 6bf6311..21e5c32 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@hapiness/rabbitmq", - "version": "1.6.1", + "version": "1.6.2", "description": "Hapiness module for rabbitmq", "main": "commonjs/index.js", "types": "index.d.ts", diff --git a/src/module/extension/build-exchange.ts b/src/module/extension/build-exchange.ts index 3afca74..80245b1 100644 --- a/src/module/extension/build-exchange.ts +++ b/src/module/extension/build-exchange.ts @@ -1,7 +1,7 @@ import { Observable } from 'rxjs/Observable'; -import { CoreModule, DependencyInjection } from '@hapiness/core'; +import { CoreModule } from '@hapiness/core'; import { ConnectionManager } from '../managers/connection-manager'; -import { metadataFromDeclarations } from '../utils'; +import { metadataFromDeclarations, instantiateWithProviders } from '../utils'; import { ExchangeDecoratorInterface } from '../decorators'; import { ExchangeManager } from '../managers/exchange-manager'; import { ExchangeWrapper } from '../managers/exchange-wrapper'; @@ -14,7 +14,7 @@ export default function buildExchanges(modules: CoreModule[], connection: Connec metadataFromDeclarations(_module.declarations, 'Exchange') .map(metadata => ({ metadata, _module })) ) - .flatMap(({ metadata, _module }) => DependencyInjection.instantiateComponent(metadata.token, _module.di) + .flatMap(({ metadata, _module }) => instantiateWithProviders(metadata.token, metadata.data.providers, _module) .map(instance => ({ instance, _module, metadata }))) .flatMap(({ instance, _module, metadata }) => { const exchange = new ExchangeManager(connection.defaultChannel, new ExchangeWrapper(instance, metadata.data)); diff --git a/src/module/extension/build-queues.ts b/src/module/extension/build-queues.ts index 9cb660a..36813c2 100644 --- a/src/module/extension/build-queues.ts +++ b/src/module/extension/build-queues.ts @@ -1,7 +1,7 @@ -import { CoreModule, DependencyInjection, extractMetadataByDecorator, Type } from '@hapiness/core'; +import { CoreModule, extractMetadataByDecorator, Type } from '@hapiness/core'; import { ConnectionManager } from '../managers/connection-manager'; import { Observable } from 'rxjs/Observable'; -import { metadataFromDeclarations } from '../utils'; +import { metadataFromDeclarations, instantiateWithProviders } from '../utils'; import { QueueDecoratorInterface, ExchangeDecoratorInterface } from '../decorators'; import { getChannel } from './get-channel'; import { QueueManager } from '../managers/queue-manager'; @@ -21,7 +21,7 @@ export default function buildQueues( .map(metadata => ({ metadata, _module })) ) .flatMap(({ metadata, _module }) => - DependencyInjection.instantiateComponent(metadata.token, _module.di) + instantiateWithProviders(metadata.token, metadata.data.providers, _module) .map(instance => ({ instance, _module, metadata}))) // Assert queue .flatMap(({ instance, _module, metadata }) => diff --git a/src/module/utils.ts b/src/module/utils.ts index d2b54d2..e815a22 100644 --- a/src/module/utils.ts +++ b/src/module/utils.ts @@ -1,4 +1,4 @@ -import { CoreModule, Type, extractMetadataByDecorator } from '@hapiness/core'; +import { CoreModule, Type, extractMetadataByDecorator, DependencyInjection } from '@hapiness/core'; import { Observable } from 'rxjs/Observable'; export const getModules = (module: CoreModule): CoreModule[] => { @@ -23,3 +23,8 @@ export function metadataFromDeclarations(declarations: Type[], decorator data: extractMetadataByDecorator(_, decoratorName) })); } + +export function instantiateWithProviders(token: any, providers: any[], module): Observable { + return DependencyInjection.createAndResolve([].concat(providers), module.di) + .flatMap(di => DependencyInjection.instantiateComponent(token, di)); +}