本文记录下WPF程序如何使用依赖注入。代码是在之前WPF使用MVVM模式开发的代码基础上修改的,MVVM的内容见下面链接。
 WPF使用MVVM模式开发
废话不多说,直接上代码:
-  nuget添加Microsoft.Extensions.DependencyInjection包 
  
-  修改App.xaml.cs文件如下: 
public App()
        {
            Services = ConfigureServices();
            //this.InitializeComponent();
        }
        /// <summary>
        /// Gets the current <see cref="App"/> instance in use
        /// </summary>
        public new static App Current => (App)Application.Current;
        /// <summary>
        /// Gets the <see cref="IServiceProvider"/> instance to resolve application services.
        /// </summary>
        public IServiceProvider Services { get; }
        /// <summary>
        /// Configures the services for the application.
        /// </summary>
        private static IServiceProvider ConfigureServices()
        {
            var services = new ServiceCollection();
            services.AddSingleton<MainView>();
            services.AddSingleton<MainViewModel>();
            services.AddSingleton<ITestService, TestService>();
            
            return services.BuildServiceProvider();
        }
        protected override void OnStartup(StartupEventArgs e)
        {
            Services.GetRequiredService<MainView>()
                .Show();
            base.OnStartup(e);
        }
- App.xaml文件中把StartupUri去掉,窗口的启动入口上方代码中已经放在了OnStartup方法中。
- MainView中使用依赖注入viewmodel
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using WpfMVVM.ViewModels;
namespace WpfMVVM.Views
{
    /// <summary>
    /// MainWindow.xaml 的交互逻辑
    /// </summary>
    public partial class MainView : Window
    {
        protected readonly MainViewModel _VM;
        public MainView(MainViewModel VM)
        {
            InitializeComponent();
            DataContext = _VM = VM;
        }
    }
}
5.代码库










