Код: Выделить всё
using incomeExpensTrckMAUI.ViewModels.Pages;
namespace incomeExpensTrckMAUI.Views.Pages.ExpensePages;
public partial class ExpensePageView : ContentPage
{
public ExpensePageView(ExpensePageViewModel expensePageViewModel)
{
InitializeComponent();
BindingContext = expensePageViewModel;
}
}

Тогда в 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