Я занимаюсь переносом проекта UWP с Xamarin Forms в проект .NET MAUI с WinUI 3. Я пытаюсь понять, где мне следует разместить существующую логику в новой структуре проекта.
Существующая структура проекта:
Проект Xamarin Forms:
Проект UWP:
Структура проекта MAUI: новое многопроектное приложение MAUI (выбрано только WinUI 3 для Windows):
Проект МАУИ:
Проект MAUI WinUI3:
Я не уверен, куда переместить логику из проекта Xamarin Forms с UWP в проект MAUI с WinUI 3. В частности, я изо всех сил пытаюсь понять:
Куда мне следует переместить регистрацию зависимостей из App.xaml.cs? Что является эквивалентом AppShell и где следует разместить логику навигации?
Как мне структурировать MainPage.xaml и MainPage.xaml.cs в новом проекте?
Что следует включить в MauiProgram.cs и MauiProgramExtension.cs?
Я не нашел много документации или руководств, посвященных этому конкретному сценарию миграции. Любые рекомендации или примеры будут с благодарностью приняты.
Куда мне следует переместить регистрацию зависимостей из App.xaml.cs? Что следует включить в MauiProgram.cs и MauiProgramExtension.cs?
Вы можете поместить регистрацию зависимостей в MauiProgramExtension.cs следующим образом:
....
builder
.UseMauiApp<App>()
.ConfigureFonts(fonts =>
{
fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold");
});
builder.Services.AddTransient<ILoggingService, LoggingService>();
builder.Services.AddTransient<ISettingsService, SettingsService>();
builder.Services.AddSingleton<MainPageViewModel>();
builder.Services.AddSingleton<MainPage>();
.....
MAUI обеспечивает встроенную поддержку использования внедрения зависимостей. Для получения дополнительной информации вы можете обратиться к официальному документу: Внедрение зависимостей . Кроме того, вы также можете увидеть этот случай: Разница между «Многопроектным приложением .NET MAUI» и «Приложением .NET MAUI». Для проекта .NET MAUI App
в корневом каталоге есть только MauiProgram.cs
. Но для проекта .NET MAUI Multi-project App
он был разделен на две части: MauiProgram.cs и MauiProgramExtension.cs.
Что является эквивалентом AppShell и где следует разместить логику навигации?
Вы можете не использовать его или удалить. Это шаблон, созданный по умолчанию. Вы также можете использовать другие стили
Как мне структурировать MainPage.xaml и MainPage.xaml.cs в новом проекте?
Смотрите это: Удалить файлы. Вы можете настроить макет и управление в проекте MAUI:
Должен ли я перенести метод OnLaunched из файла App.xaml.cs в UWP в файл App.xaml.cs в WinUI 3? Нет, мигрировать не нужно. Вы можете нажать MauiWinUIApplication и нажать f12. Тогда вы увидите, что OnLaunched переопределен.
Спасибо за ответ. Однако у меня все еще есть пара вопросов. Должен ли я перенести метод OnLaunched из файла App.xaml.cs в UWP в файл App.xaml.cs в WinUI 3? Если да, то как мне определить rootFrame в этом контексте? защищенное переопределение void OnLaunched (LaunchActivatedEventArgs e) { ApplicationView.PreferredLaunchWindowingMode = ApplicationViewWindowingMode.Auto; Frame rootFrame = Window.Current.Content as Frame; если (rootFrame == null) {rootFrame = новый Frame(); rootFrame.NavigationFailed += OnNavigationFailed; Window.Current.Content = rootFrame;}