import { AppProvider } from "../../domain/models/app-provider";
export declare abstract class AppModule {
    abstract name: string;
    abstract providers: AppProvider[];
    protected serviceRegistry: Record<string, any>;
    protected config: Record<string, any>;
    constructor(args: {
        deps: Record<string, AppModule>;
        config?: Record<string, any>;
    });
    init(): void;
    getService<T>(name: string): T;
    getConfig<T = any>(path?: string, throwIfMissing?: boolean): T | undefined;
}
export interface AppModuleClass<T extends AppModule = AppModule> {
    dependsOn?: readonly string[];
    readonly config?: Record<string, any>;
    new (args: {
        deps: Record<string, AppModule>;
        config?: Record<string, any>;
    }): T;
}
