70 lines
1.4 KiB
TypeScript
70 lines
1.4 KiB
TypeScript
import "reflect-metadata";
|
|
import {
|
|
AlveoFactory,
|
|
Inject,
|
|
Injectable,
|
|
Module,
|
|
ModuleRef,
|
|
type OnModuleInit,
|
|
} from "./index";
|
|
|
|
const LOGGER_TOKEN = Symbol("LOGGER");
|
|
|
|
@Injectable()
|
|
class LoggerService {
|
|
log(message: string) {
|
|
console.log(`[Logger]: ${message}`);
|
|
}
|
|
}
|
|
|
|
@Injectable()
|
|
class DatabaseService implements OnModuleInit {
|
|
constructor(
|
|
@Inject(LOGGER_TOKEN) private readonly logger: LoggerService,
|
|
@Inject(ModuleRef) private readonly moduleRef: ModuleRef,
|
|
) {}
|
|
|
|
async onModuleInit() {
|
|
this.logger.log("DatabaseService initialized.");
|
|
const self = await this.moduleRef.get(DatabaseService);
|
|
this.logger.log(`ModuleRef self-check: ${self === this}`);
|
|
}
|
|
|
|
query() {
|
|
return "data";
|
|
}
|
|
}
|
|
|
|
@Injectable()
|
|
export class TestService {
|
|
constructor(private readonly logger: LoggerService) {
|
|
this.logger.log("TestService initialized.");
|
|
}
|
|
}
|
|
|
|
@Module({
|
|
providers: [
|
|
DatabaseService,
|
|
LoggerService,
|
|
{ provide: LOGGER_TOKEN, useExisting: LoggerService },
|
|
],
|
|
exports: [DatabaseService, LoggerService],
|
|
})
|
|
class DatabaseModule {}
|
|
|
|
@Module({
|
|
imports: [DatabaseModule],
|
|
providers: [TestService],
|
|
})
|
|
class AppModule {}
|
|
|
|
async function bootstrap() {
|
|
console.log("Starting AlveoJS test...");
|
|
const app = await AlveoFactory.create(AppModule);
|
|
const db = await app.get(DatabaseService);
|
|
console.log(`Query result: ${db.query()}`);
|
|
await app.close();
|
|
}
|
|
|
|
bootstrap().catch(console.error);
|