Add moment.js as a dependency, enhance TypeScript configuration to exclude scripts, and introduce new examples for dependency injection and health checks.
This commit is contained in:
0
examples/cluster.json
Normal file
0
examples/cluster.json
Normal file
@@ -1,3 +1,32 @@
|
||||
import {DependencyManager} from '../src';
|
||||
import {ConfigurationReader, DependencyManager, JSONConfigurationLoader, Type} from '../src/di';
|
||||
import type {IMessageQueue} from '../src/example/IMessageQueue';
|
||||
|
||||
const dependencyManager = new DependencyManager(async path => await import(path));
|
||||
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);
|
||||
61
examples/di.json
Normal file
61
examples/di.json
Normal file
@@ -0,0 +1,61 @@
|
||||
[
|
||||
{
|
||||
"name": "connection",
|
||||
"class": "src/env/ConfigurationProvider",
|
||||
"lifecycle": "singleton"
|
||||
},
|
||||
{
|
||||
"name": "mq.heartbeat.interval",
|
||||
"class": "src/env/ConfigurationProvider",
|
||||
"lifecycle": "singleton"
|
||||
},
|
||||
{
|
||||
"name": "mq.heartbeat.timeout",
|
||||
"class": "src/env/ConfigurationProvider",
|
||||
"lifecycle": "singleton"
|
||||
},
|
||||
{
|
||||
"name": "environment.version",
|
||||
"class": "src/env/ConfigurationProvider",
|
||||
"lifecycle": "singleton"
|
||||
},
|
||||
{
|
||||
"class": "src/example/Connection",
|
||||
"instanceType": "src/example/IConnection",
|
||||
"lifecycle": "singleton",
|
||||
"inject": [
|
||||
{
|
||||
"name": "connection",
|
||||
"class": "src/env/ConfigurationProvider"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"class": "src/example/MessageQueue",
|
||||
"instanceType": "src/example/IMessageQueue",
|
||||
"inject": ["src/example/IConnection"],
|
||||
"eager": true
|
||||
},
|
||||
{
|
||||
"class": "src/health/HealthCheck",
|
||||
"inject": [
|
||||
{
|
||||
"name": "environment.version",
|
||||
"class": "src/env/ConfigurationProvider"
|
||||
},
|
||||
{
|
||||
"name": "app",
|
||||
"class": "src/env/ConfigurationProvider"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"class": "src/health/HttpHealthCheck",
|
||||
"inject": [
|
||||
{
|
||||
"name": "environment.version",
|
||||
"class": "src/env/ConfigurationProvider"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
Reference in New Issue
Block a user