Avaloniaui - Wie können ViewModels mithilfe von Komposition -Root -basiertem DI -System Ansichten injizieren?C#

Ein Treffpunkt für C#-Programmierer
Anonymous
 Avaloniaui - Wie können ViewModels mithilfe von Komposition -Root -basiertem DI -System Ansichten injizieren?

Post by Anonymous »

Ich bin neu in Avalonia/ WPF-, XAML- und Desktop -Entwicklung im Allgemeinen, also bitte verzeihen und klären Sie alle verwandten Missverständnisse, die ich zeige. Ich werde weiterhin die verfügbaren Dokumentation untersuchen, aber es fällt mir schwer, Material zu finden, das sich mit dem Punkt befasst, an dem ich stehe. Ich vertraut mit dem Paket von Microsoft.Extensions. Ich denke, ich habe die Dinge konzeptionell herausgefunden, um Dienste und ViewModels zu registrieren und Konstruktoren für diese Klassen angemessen einzurichten, so dass das Rahmen Abhängigkeiten in diese Klassen zur Instanziierung injiziert. Wo ich jedoch stecken bleibe, ist die Implementierung der Konstruktorinjektion für View-Klassen.

Code: Select all

// App.axaml.cs
public partial class App : Application
{
private IServiceProvider _services;

public override void Initialize()
{
AvaloniaXamlLoader.Load(this);
}

public override void OnFrameworkInitializationCompleted()
{
ConfigureServiceProvider();

if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
{
desktop.MainWindow = _services.GetService();
}

base.OnFrameworkInitializationCompleted();
}

private void ConfigureServiceProvider()
{
var services = ConfigureServices();
_services = services.BuildServiceProvider();
}

private static IServiceCollection ConfigureServices()
{
var services = new ServiceCollection();

services.AddTransient();
services.AddTransient();

return services;
}
}
< /code>
Das Ziel besteht dann darin, die MainWindowViewModel-Klasse über den Konstruktor in die MainWindow-Klasse zu injizieren und dieses Argument der DataAcontext-Eigenschaft der MainWindow-Ansichtsklasse zuzuweisen: < /p>
 ">"> ">"> ">"> ">">// MainWindow.axaml.cs
public partial class MainWindow : Window
{
public MainWindow(MainWindowViewModel viewModel)
{
DataContext = viewModel;
InitializeComponent();
#if DEBUG
this.AttachDevTools();
#endif
}

private void InitializeComponent()
{
AvaloniaXamlLoader.Load(this);
}
}

< /code>
Dies führt jedoch dazu, dass der folgende Fehler erhöht wird: < /p>
  MainWindow.axaml(1, 2): [XAMLIL] Unable to find public constructor for type MyApp.Client:MyApp.Client.Views.MainWindow() Line 1, position 2.
< /code>
Es scheint, dass die Ansicht nicht ohne die Existenz eines parameterlosen Konstruktors instanziiert werden kann. Dies scheint jedoch die Konstruktorinjektion zu verhindern. Ich bin auf eine Reihe von Beispielen gestoßen, bei denen ViewModels nicht beim Service-Container registriert sind und stattdessen direkt im Ansichtskonstruktor instanziiert und der DataContext-Eigenschaft zugeordnet sind. Ich würde es vorziehen, diesen Ansatz zu vermeiden. Tutorial, in dem zeigt, wie ViewModels über Konstruktor ordnungsgemäß in Ansichten injiziert werden kann? Ist das möglich? Gibt es etwas, das ich in der Datei mainWindow.axaml [url=viewtopic.php?t=12045]ändern[/url] kann, um das gewünschte Verhalten zu ermöglichen? Vielen Dank für Ihre und immer wieder, ich würde es sehr schätzen, die Klärung von Missverständnissen zu schätzen, die ich möglicherweise habe.// MainWindow.axaml





Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post