在 ASP.NET Core 中默认就已经集成了依赖注入,最近把 DbTool 迁移到了 WPF dotnetcore 3.1,
在 WPF 中咱们也但愿可以使用依赖注入,下面来介绍一下如何在 WPF dotnetcore3.1 中使用依赖注入html
App.xaml
文件,删除 StartupUri 配置, StartupUri="MainWindow.xaml"
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 的构造方法中注入咱们所须要的服务便可git
public partial class MainWindow: Window { private readonly IStringLocalizer<MainWindow> _localizer; public MainWindow( IStringLocalizer<MainWindow> localizer) { InitializeComponent(); _localizer = localizer; } // ... }