boot method
Boots the application by initializing core services and providers.
Sets up:
- Default Router
- TemplateEngine with views and public paths
- StaticFilesServer
- Uuid generator
- SQLite Database in
lib/src/storage/database.sqlite
Then boots all registered providers and triggers onBooted callbacks.
Sets status to AppStatus.ready on success, or AppStatus.error on failure.
Implementation
Future<void> boot() async {
status = AppStatus.booting;
setKeys();
// Default Router
final router = Router();
container.bindInstance<Router>(router);
// Default View Engine
final settings = {"viewsPath": 'lib/src/http/views', "publicPath": 'lib/src/http/public'};
final engine = TemplateEngine(viewsDirectory: settings['viewsPath']!, publicDirectory: settings['publicPath']!);
// Enable caching for performance
// Enabled by default for performance
engine.shouldCache = true;
// engine.shouldCache = config?.get('view.cache', true) ?? true;
container.bindInstance<TemplateEngine>(engine);
// Default Static Files Server
final staticFilesServer = StaticFilesServer();
container.bindInstance<StaticFilesServer>(staticFilesServer);
// Default UUID Generator
final Uuid uuid = Uuid();
container.bindInstance<Uuid>(uuid);
switch(Model.defaultDisk) {
case .file:
case DatabaseDisk.s3:
case DatabaseDisk.sqlite:
await _initSQLite();
case DatabaseDisk.pgsql:
await _initSQLite();
await _initPostgres();
}
await container.initialize();
try {
// Boot all registered providers
for (final provider in _providers) {
try {
await provider.boot(container);
} catch (e, stack) {
throw ProviderException.unbooted(type: provider.runtimeType, trace: stack);
}
}
// Execute post-boot callbacks
for (final callback in _bootedCallbacks) {
callback();
}
status = AppStatus.ready;
} catch (e, stack) {
status = AppStatus.error;
archeryLogger.error("Error booting app", {"origin": "App.boot", "error": e.toString(), "stack": stack.toString()});
rethrow;
}
}