C#中WPF 使用依赖注入

所谓依赖注入,是指程序运行过程中,如果需要调用另一个对象协助时,无须在代码中创建被调用者,而是依赖于外部的注入。Spring的依赖注入对调用者和被调用者几乎没有任何要求,完全支持对POJO之间依赖关系的管理。

现在对于一个项目来说都是标配了,下面牛刀小试,
使用Vs2022创建项目

C#中WPF 使用依赖注入_第1张图片

C#中WPF 使用依赖注入_第2张图片
上面步骤可以省略,只是在这里提醒下使用wpf的规格。 下面开始改造,

  1. 找到App.xaml文件
    C#中WPF 使用依赖注入_第3张图片
    2.添加Nuget包
  <PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="7.0.0" />
    <PackageReference Include="Microsoft.Extensions.Hosting" Version="7.0.0" />
    <PackageReference Include="Microsoft.Extensions.Hosting.Abstractions" Version="7.0.0" />

3.修改App.xaml.cs文件

using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Threading.Tasks;
using System.Windows;
using WpfAppDemo2.Service;
using WpfAppDemo2.ViewModels;

namespace WpfAppDemo2
{
    /// 
    /// Interaction logic for App.xaml
    /// 
    public partial class App : Application
    {
        IHost _host;

        public App()
        {
            _host = Host.CreateDefaultBuilder().ConfigureServices(ConfiguratioHostServices).Build();
        }

        private void ConfiguratioHostServices(HostBuilderContext hostBuilder, IServiceCollection services)
        {
        //这个根据自己需要注入
            services.AddScoped<IMenuInfoService, MockMenuInfoService>();
            services.AddTransient<MainWindowViewModel>();
            services.AddSingleton<MainWindow>();
        }

        protected override void OnStartup(StartupEventArgs e)
        {
            _host?.Start();
            MainWindow? window = _host?.Services.GetRequiredService<MainWindow>();
            window?.Show();
            base.OnStartup(e);
        }

        protected override async void OnExit(ExitEventArgs e)
        {
            base.OnExit(e);
            if (_host != null)
            {
                await _host.StopAsync();
            }
            _host?.Dispose();
        }
    }
}

好了完活,这样就可以通过ICO容器注入,启动主窗体。

你可能感兴趣的:(Wpf,wpf,c#,.net)