背景:
我使用 Microsoft.Extensions.DependencyInjection 在 WPF 应用程序中实现了依赖项注入。
应用程序.xaml.cs
protected override async void OnStartup(StartupEventArgs e)
{
AppHost = Host.CreateDefaultBuilder()
.ConfigureServices((hostContext, services) =>
{
services.AddTransient<IFileRepository, FileRepository>();
services.AddSingleton<MainWindow>();
}).Build();
await AppHost!.StartAsync();
var startupForm = AppHost.Services.GetRequiredService<MainWindow>();
startupForm.Show();
base.OnStartup(e);
}
在我的 OpenProjectViewModel 中,我注入 fileRepository。
public IFileRepository fileRepository { get; }
public OpenProjectViewModel(IFileRepository _fileRepository)
{
fileRepository = _fileRepository;
}
在 OpenProjectView.xaml 中我设置了数据上下文
<UserControl.DataContext>
<local:OpenProjectViewModel/>
</UserControl.DataContext>
问题
当该应用程序启动时,它不喜欢我在 OpenProjectViewModel 中没有无参数构造函数。当我在 OpenProjectViewModel 中添加无参数构造函数时,应用程序启动,但 fileRepository 为空,因为它尚未被注入。
问题
有没有办法让应用程序知道在使用 OpenProjectViewModel 时何时应该注入 FileRepository?我按照这个指南来设置 DI。但 Tim 向您展示了如何在视图代码隐藏中进行设置。
如果我错过分享任何内容,请告诉我。 感谢您提前提供的所有帮助。
除非依赖无参数构造函数,否则无法在 XAML 中实例化视图模型。
你应该使用
AppHost.Services.GetRequiredService <MainWindowViewModel>()
并将代码中
DataContext
的MainWindow
设置为结果。
然后会将
IFileRepository
作为参数传递给构造函数。