gpt4 book ai didi

wpf - .NET Core 3.0 中 WPF 的依赖注入(inject)

转载 作者:行者123 更新时间:2023-12-04 11:09:30 24 4
gpt4 key购买 nike

我非常熟悉 ASP.NET Core 和开箱即用的依赖注入(inject)支持。 Controller 可以通过在其构造函数中添加参数来要求依赖项。如何在 WPF UserControls 中实现依赖关系?我尝试向构造函数添加一个参数,但没有奏效。我喜欢 IOC 的概念,并且更愿意将其引入 WPF。

最佳答案

我最近在我的项目中遇到了这个要求,我是这样解决的。
用于 WPF 的 .NET Core 3.0 中的依赖注入(inject)。在解决方案中创建 WPF Core 3 项目后,需要安装/添加 NuGet 包:

Microsoft.Extensions.DependencyInjection
就我而言,我创建了一个名为 LogBase 的类,我想将其用于日志记录,因此在您的 App 类中,添加以下内容(这只是一个基本示例):
private readonly ServiceProvider _serviceProvider;

public App()
{
var serviceCollection = new ServiceCollection();
ConfigureServices(serviceCollection);
_serviceProvider = serviceCollection.BuildServiceProvider();
}

private void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<ILogBase>(new LogBase(new FileInfo($@"C:\temp\log.txt")));
services.AddSingleton<MainWindow>();
}

private void OnStartup(object sender, StartupEventArgs e)
{
var mainWindow = _serviceProvider.GetService<MainWindow>();
mainWindow.Show();
}
在您的 App.xaml 中,添加 Startup="OnStartup"如下所示:
<Application x:Class="VaultDataStore.Wpf.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:VaultDataStore.Wpf"
Startup="OnStartup">
<Application.Resources>

</Application.Resources>
</Application>
因此,在 MainWindow.xaml.cs 中,像这样在构造函数中注入(inject) ILogBase:
private readonly ILogBase _log;

public MainWindow(ILogBase log)
{
_log = log;

...etc.. you can use _log over all in this class
在我的 LogBase 类中,我使用任何我喜欢的记录器。
我在 this GitHub repo 中将所有这些加在一起.

同时,有人问我如何在用户控件中使用注入(inject)。如果有人从中受益,我会提出这个解决方案。查一下 here .

关于wpf - .NET Core 3.0 中 WPF 的依赖注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54877352/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com