[*] Проверенная конфигурация маршрутизации: < /p>
- проверил, что oboutingpage < /code> был Правильно зарегистрировано в Routing.RegisterRoute () Inside Appshell.xaml.cs .
- Двойная проверка для любых Опечатки в названиях маршрутов. < /p>
< /li>
Навигационные маршруты для других страниц (HomePage, vistorypage , koumepage ) уже работали нормально перед добавлением внедрения.
[*] Попробого от задержки инициализации оболочки: < /p>
- Используемый task.delay (100) < /code> Inside Appshell конструктор, чтобы убедиться, что оболочка загружается первым. > по -прежнему оставался null при навигации на адаптацию.
- Я обеспечил, чтобы Appshell был добавлен в качестве синглтона в mauiprogram.cs . < /p>
< /li>
Навигационная служба (NavigationServices) зависит от Shell , и я подтвердил, что DI был должным образом настроен перед добавлением взимания. - Однако. Ошибка сохраняется, предполагая, что Shell не разрешается должным образом с помощью контейнера DI.
- Inside createWindow () , я попытался получить AppShell с использованием _serviceprovider.getRequiredService
() . - Однако это все еще приводит к нулевой ссылке При попытке ориентироваться. И почему я застрял:
Перед добавлением onationingpage все работало, как и ожидалось.
Теперь навигационные перерывы полностью из -за Shell < /code> не доступны в di. < /p>
< /li>
< P> У меня нет идей о том, как правильно инициализировать Shell , обеспечивая, чтобы она была доступна для навигационных услуг.
public partial class App : Application
{
private readonly IServiceProvider _serviceProvider;
public App(IServiceProvider serviceProvider)
{
InitializeComponent();
_serviceProvider = serviceProvider;
}
protected override Window CreateWindow(IActivationState? activationState)
{
var shell = _serviceProvider.GetService();
if (shell == null)
{
throw new InvalidOperationException("AppShell could not be resolved from service provider.");
}
bool hasCompletedOnboarding = PreferencesServices.HasCompletedOnboarding();
// Navigate to the appropriate startup page inside the Shell
Task.Run(async () =>
{
await Task.Delay(100); // Small delay to ensure Shell initializes
await shell.GoToAsync(hasCompletedOnboarding ? "//home" : "//onboarding");
});
return new Window(shell);
}
}
} public AppShell()
< /code>
{
initializecomponent (); < /p>
Routing.RegisterRoute("home", typeof(HomePage));
Routing.RegisterRoute("onboarding", typeof(OnboardingPage));
Routing.RegisterRoute("history", typeof(HistoryPage));
Routing.RegisterRoute("goal", typeof(GoalPage));
Dispatcher.Dispatch(async () => await InitializeShellAsync());
}
private async Task InitializeShellAsync()
{
await Task.Delay(100);
bool hasCompletedOnboarding = PreferencesServices.HasCompletedOnboarding();
if (!hasCompletedOnboarding)
{
Console.WriteLine("[DEBUG] Navigating to onboarding...");
await Shell.Current.GoToAsync("//onboarding");
}
}
Подробнее здесь: https://stackoverflow.com/questions/793 ... aui-net-ap
Мобильная версия