我专门为Windows开发了一款毛伊岛应用程序.如果数据库中存在特定表,我希望它在启动时进行判断. 我有一个单独的类来管理数据库访问并通过依赖注入注入它.
然而,由于LifecycleEvent是在构建器中创建的,所以我无法通过通常的DI样式方式访问该类.那么我该怎么做呢?
到目前为止,我的代码如下:
public static class MauiProgram
{
public static MauiApp CreateMauiApp()
{
var builder = MauiApp.CreateBuilder();
builder
.UseMauiApp<App>()
.UseMauiCommunityToolkit()
.ConfigureFonts(fonts =>
{
fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold");
});
builder.Services.AddTransient<MainPage>();
builder.Services.AddTransient<MainPageViewModel>();
builder.Services.AddSingleton<IDatabaseAccess, DatabaseAccess>();
builder.ConfigureLifecycleEvents(events => events.AddWindows(windows => windows
.OnLaunching((window, args) =>
{
var app = App.Current;
using (var serviceScope = App.Current.Handler.MauiContext.Services.GetService<IServiceScopeFactory>().CreateScope())
{
var dbAccess = serviceScope.ServiceProvider.GetRequiredService<IDatabaseAccess>();
if (!dbAccess.DoesMappingTableExist())
{
dbAccess.InitializeDb();
}
}
})));
#if DEBUG
builder.Logging.AddDebug();
#endif
return builder.Build();
}
}
这不起作用,因为在运行时var app = App.Current
是null
.windows
参数也是如此,所以我得到了NullReferenceException
.