如何为 .NET Core 3.0 中 WPF 配置依赖注入 ?

咨询区

  • user842818

我非常熟悉 ASP.NET Core 和它开箱即用的依赖注入支持,当 Controller 需要依赖注入时,可以在 构造函数 中以参数的形式来实现,这个IOC的理念相当好,我想把它带到 WPF 中,当我同样以构造函数的方式进行注入却无法实现。

请问我该如何修改让 WPF 支持呢,我真的很喜欢IOC。

回答区

  • maytham-ɯɐɥʇʎɐɯ

我最近在一个项目也需要实现这个功能,我是这样实现的。

首先需要创建一个 WPF Core 3 的项目,然后从 nuget 上安装依赖包: Microsoft.Extensions.DependencyInjection

在我的项目中,我创建了一个 LogBase 类用来记录日志,这里我就拿它来做例子。


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>

接下来我就可以将 ILogBase 注入到构造函数中,如下代码所示:


private readonly ILogBase _log;

public MainWindow(ILogBase log)
{
    _log = log;

    ...etc.. you can use _log over all in this class
}

完整的代码,我上传到了 github:https://github.com/maythamfahmi/WpfSampleDi

点评区

自打.NET Core 面市以来,IOC 逐渐盛行,现在已经很难在代码中看到 new 了,取而代之的是满屏的 await,async ????,时代在变,我们也得跟上。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值