32 lines
1.2 KiB
TypeScript
32 lines
1.2 KiB
TypeScript
import {ConfigurationReader, DependencyManager, JSONConfigurationLoader, Type} from '../src/di';
|
|
import type {IMessageQueue} from '../src/example/IMessageQueue';
|
|
|
|
async function main() {
|
|
const moduleLoader = async (path: string) => await import(`../${path}.ts`);
|
|
const dependencyManager = new DependencyManager(moduleLoader);
|
|
const configurationReader = new ConfigurationReader(dependencyManager, new JSONConfigurationLoader());
|
|
|
|
await configurationReader.load('./examples/di.json');
|
|
|
|
// Instantiate all eager types
|
|
const eagerTypes = await dependencyManager.getEagerTypes();
|
|
|
|
for (const type of eagerTypes) {
|
|
await dependencyManager.instantiateType(type);
|
|
}
|
|
|
|
// Resolve the MessageQueue
|
|
const messageQueueType = new Type('src/example/IMessageQueue');
|
|
const messageQueue = await dependencyManager.instantiateType<IMessageQueue>(messageQueueType);
|
|
|
|
messageQueue.subscribe('test-topic', (message: string) => {
|
|
console.log('[MessageQueue] [Listener] Received message:', message);
|
|
});
|
|
|
|
// Use the service
|
|
await messageQueue.publish('test-topic', 'Hello, DI!');
|
|
|
|
console.log('[MessageQueue] [Publisher] Message published successfully!');
|
|
}
|
|
|
|
main().catch(console.error); |