Ошибка Shell после добавления страницы адаптации для первых пользователей в приложении Maui .netC#

Место общения программистов C#
Ответить
Anonymous
 Ошибка Shell после добавления страницы адаптации для первых пользователей в приложении Maui .net

Сообщение Anonymous »

ранее я мог ориентироваться между страницами в моем приложении .NET Maui без каких -либо проблем. Однако, после введения на адаптационной странице, я начал столкнуться с ошибками, связанными с Shell. Независимо от того, какие исправления я пробовал, проблема сохранялась, часто приводила к тому, что Shell.current - это NULL. Самая последняя и последовательная ошибка, которую я получаю: System.invalidoperationException: «Невозможно разрешить службу для типа microsoft.maui.controls.shell, пытаясь активировать App.core.services.navigationservices.

[*] Проверенная конфигурация маршрутизации: < /p>
  • проверил, что oboutingpage < /code> был Правильно зарегистрировано в Routing.RegisterRoute () Inside Appshell.xaml.cs .
  • Двойная проверка для любых Опечатки в названиях маршрутов. < /p>
    < /li>
    Навигационные маршруты для других страниц (HomePage, vistorypage , koumepage ) уже работали нормально перед добавлением внедрения.
< /li>
[*] Попробого от задержки инициализации оболочки: < /p>
  • Используемый task.delay (100) < /code> Inside Appshell конструктор, чтобы убедиться, что оболочка загружается первым. > по -прежнему оставался null при навигации на адаптацию.
[*] > Проверенная инъекция зависимости (DI) Настройка:
  • Я обеспечил, чтобы Appshell был добавлен в качестве синглтона в mauiprogram.cs . < /p>
    < /li>
    Навигационная служба (NavigationServices) зависит от Shell , и я подтвердил, что DI был должным образом настроен перед добавлением взимания.
  • Однако. Ошибка сохраняется, предполагая, что Shell не разрешается должным образом с помощью контейнера DI.
[*] принудительная оболочка разрешение:
  • Inside createWindow () , я попытался получить AppShell с использованием _serviceprovider.getRequiredService
    () .
  • Однако это все еще приводит к нулевой ссылке При попытке ориентироваться. И почему я застрял:

    Перед добавлением onationingpage все работало, как и ожидалось.

    Теперь навигационные перерывы полностью из -за Shell < /code> не доступны в di. < /p>
    < /li>
    < P> У меня нет идей о том, как правильно инициализировать Shell , обеспечивая, чтобы она была доступна для навигационных услуг.
Любое понимание того, что мне не хватает или как это исправить? < /p>
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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»