Как реализовать внедрение зависимостей в Avalonia и зарегистрировать несколько представлений и моделей представлений?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Как реализовать внедрение зависимостей в Avalonia и зарегистрировать несколько представлений и моделей представлений?

Сообщение Anonymous »

Я создал базовое приложение для Android с помощью .NET MAUI и сейчас пытаюсь реализовать то же самое с Avalonia (с помощью набора инструментов сообщества MVVM). В документации MAUI четко показано, как реализовать внедрение зависимостей. Регистрация представлений, моделей представлений, а также сервисов прошла довольно легко. В Мауи я использовал внедрение конструктора для внедрения модели представления в представление следующим образом:

Код: Выделить всё

using incomeExpensTrckMAUI.ViewModels.Pages;

namespace incomeExpensTrckMAUI.Views.Pages.ExpensePages;

public partial class ExpensePageView : ContentPage
{
public ExpensePageView(ExpensePageViewModel expensePageViewModel)
{
InitializeComponent();
BindingContext = expensePageViewModel;
}
}
Затем в файле MauiProgram.cs были зарегистрированы представления, модели представлений и сервисы, как показано на следующем изображении:
Изображение

Тогда в MAUI все работало гладко. Существует ли аналогичный способ реализации внедрения внедрения зависимостей в Авалонии?
В большинстве руководств используются основное представление по умолчанию и модель представления Mian. В них не показано четкого способа реализации внедрения внедрения внедрения при наличии нескольких представлений. и просмотреть модели. Также в документации предлагается использовать Microsoft.Extensions.DependencyInjection, но потом, когда я попробовал следующее:

Код: Выделить всё

using incomeExpensTrckAVALONIA.ViewModels;
using Microsoft.Extensions.DependencyInjection;

namespace incomeExpensTrckAVALONIA
{
public static class ServiceCollectionExtensions
{
public static void AddCommonServices(this IServiceCollection collection)
{
collection.AddTransient();
}

public static void AddExpenseServices(this IServiceCollection collection)
{
collection.AddSingleton();
}
}
}

и:

Код: Выделить всё

using Avalonia;
using Avalonia.Controls.ApplicationLifetimes;
using Avalonia.Data.Core.Plugins;
using Avalonia.Markup.Xaml;

using incomeExpensTrckAVALONIA.ViewModels;
using incomeExpensTrckAVALONIA.Views;
using Microsoft.Extensions.DependencyInjection;

namespace incomeExpensTrckAVALONIA;

public partial class App : Application
{
public override void Initialize()
{
AvaloniaXamlLoader.Load(this);
}

public override void OnFrameworkInitializationCompleted()
{
// Line below is needed to remove Avalonia data validation.
// Without this line you will get duplicate validations from both Avalonia and CT
BindingPlugins.DataValidators.RemoveAt(0);

// Register all the services needed for the application to run
var collection = new ServiceCollection();
collection.AddCommonServices();

var expenseCollection = new ServiceCollection();
expenseCollection.AddExpenseServices();

// Creates a ServiceProvider containing services from the provided IServiceCollection
var services = collection.BuildServiceProvider();

var expenseServices = expenseCollection.BuildServiceProvider();

var vm = services.GetRequiredService();

var expenseVm = expenseServices.GetRequiredService();

if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
{
desktop.MainWindow = new MainWindow
{
DataContext = vm
};

//desktop.MainWindow.Content = new ExpensePageView
//{
//    DataContext = expenseVm
//};
}
else if (ApplicationLifetime is ISingleViewApplicationLifetime singleViewPlatform)
{
singleViewPlatform.MainView = new ExpensePageView
{
DataContext = expenseVm
};
}

base.OnFrameworkInitializationCompleted();
}
}

Очевидно, не сработало. Любые предложения будут высоко ценится! Кроме того, будьте откровенны, поскольку я впервые пытаюсь работать с Авалонией.

Подробнее здесь: https://stackoverflow.com/questions/783 ... e-views-an
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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