dotnetcore3.1 WPF 中使用依赖注入
Intro
在 ASP.NET Core 中默认就已经集成了依赖注入,最近把 DbTool 迁移到了 WPF dotnetcore 3.1,
在 WPF 中我们也希望能够使用依赖注入,下面来介绍一下如何在 WPF dotnetcore3.1 中使用依赖注入
App.xaml 配置
- 打开
App.xaml
文件,删除 StartupUri 配置,StartupUri="MainWindow.xaml"
- 打开 App.xaml.cs 重载
OnStartup
方法,在 OnStartup 中添加自己的初始化代码,在初始化代码中注册自己的服务注册 MainWindow,并在最后从服务中获取MainWindow
服务,并调用 window 的 Show 方法
public partial class App : Application { protected override void OnStartup(StartupEventArgs e) { Init(); base.OnStartup(e); } private void ConfigureServices(IServiceCollection services) { services.TryAddTransient<MainWindow>(); services.AddJsonLocalization(options => options.ResourcesPathType = ResourcesPathType.CultureBased); } private void Init() { #region Init Settings var settings = new SettingsViewModel(); settings.ConnectionString = settings.DefaultConnectionString; // set current culture Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo(settings.DefaultCulture); Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(settings.DefaultCulture); #endregion Init Settings IServiceCollection services = new ServiceCollection(); ConfigureServices(services); services.BuildServiceProvider() .GetRequiredService<MainWindow>() .Show(); } }
MainWindow
由于 MainWindow 上面我们已经修改为通过依赖注入来获取,所以我们可以在 MainWindow 的构造方法中注入我们所需要的服务即可
public partial class MainWindow: Window { private readonly IStringLocalizer<MainWindow> _localizer; public MainWindow( IStringLocalizer<MainWindow> localizer) { InitializeComponent(); _localizer = localizer; } // ... }
Reference
- https://www.cnblogs.com/hippieZhou/p/10637348.html
- https://github.com/WeihanLi/DbTool/tree/wpf-dev/DbTool
来源:https://www.cnblogs.com/weihanli/archive/2020/02/26/12366166.html