在WPF中使用.NET Core 3.0依赖项注入和服务提供程序
2019-10-29 17:03
1791 查看
前言
我们都知道.NET Core提供了对依赖项注入的内置支持。我们通常在ASP.NET Core中使用它(从Startup.cs文件中的ConfigureServices方法开始),但是该功能不限于此框架,我们可以在WPF和Windows Forms应用程序中使用它。
实践
新建项目
将所需的NuGet包添加到项目中。
-
Microsoft.Extensions.DependencyInjection
- Microsoft.Extensions.Options.ConfigurationExtensions
- Microsoft.Extensions.Configuration.Json
然后,将一个名为appsettings.json的文件添加到项目的根文件夹。将其“ 构建操作”属性设置为“ 内容”,将“复制到输出目录”设置为“ 复制”(如果较新):
{ "AppSettings": { "AppName": "SampleNetCore3WpfDependencyInjection" } }
创建一个AppSettings.cs文件来保存配置设置。该文件将映射我们在appsettings.json中编写的设置:
public class AppSettings { public string AppName { get; set; } }
创建一个示例服务:
public interface ISampleService { Task<string> GetCurrentDate(); }
public class SampleService : ISampleService { public async Task<string> GetCurrentDate() => await Task.FromResult(DateTime.Now.ToLongDateString()); }
然后像往常一样在IOC容器中注册服务:
services.AddScoped<ISampleService, SampleService>();
打开App.xaml文件并删除Application类的StartupUri属性。然后,我们需要重写App.xaml.cs中的OnStartup方法:
public partial class App : Application { public IServiceProvider ServiceProvider { get; private set; } public IConfiguration Configuration { get; private set; } protected override void OnStartup(StartupEventArgs e) { var builder = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true); Configuration = builder.Build(); var serviceCollection = new ServiceCollection(); ConfigureServices(serviceCollection); ServiceProvider = serviceCollection.BuildServiceProvider(); var mainWindow = ServiceProvider.GetRequiredService<MainWindow>(); mainWindow.Show(); } private void ConfigureServices(IServiceCollection services) { services.Configure<AppSettings>(Configuration.GetSection(nameof(AppSettings))); services.AddScoped<ISampleService, 15d8 SampleService>(); services.AddTransient(typeof(MainWindow)); } }
MainWindow简单布局及代码改造
如上所述,MainWindow位于IOC容器中。因此,当我们从服务提供商处获得服务时,它将自动注入所有必需的服务(如果有)。:
public partial class MainWindow : Window { private readonly ISampleService sampleService; private readonly AppSettings settings; public MainWindow(ISampleService sampleService, IOptions<AppSettings> settings) { InitializeComponent(); this.sampleService = sampleService; this.settings = settings.Value; } private async void Button_Click(object sender, RoutedEventArgs e) { var serviceData =await sampleService.GetCurrentDate(); var settingsData = settings; TextBox1.Text = $"serviceData:{serviceData}{Environment.NewLine}settingsData:{settings.AppName}"; } }
Demo地址:github
相关文章推荐
- .Net Core中依赖注入服务使用总结
- 理解PHP依赖注入容器(dependency injection container)系列(五) 使用XML 或 YAML 来描述服务
- WPF PRISM开发入门二(Unity依赖注入容器使用)
- 使用ASP.NET Web Api构建基于REST风格的服务实战系列教程【四】——实现模型工厂,依赖注入以及格式配置
- Spring 3.0 学习-DI 依赖注入_创建Spring 配置-使用一个或多个XML 文件作为配置文件,使用自动注入(byName),在代码中使用注解代替自动注入,使用自动扫描代替xml中bea
- .Net Core在程序的任意位置使用和注入服务的方法
- Build a service by C#.net(使用C#开发服务提供程序)
- .NET CORE——Console中使用依赖注入
- AspNet Core 核心 通过依赖注入(注入服务)
- 在.NET Core 3.0中的WPF中使用IOC图文教程
- windows下服务程序相关(别人提供的5种封装使用)
- ASPNETCOREAPI 跨域处理 SQL 语句拼接 多条件分页查询 ASPNET CORE 核心 通过依赖注入(注入服务)
- Eclipse 使用svn插件检出maven项目,启动服务时提示依赖注入失败
- .Net Core 依赖注入注入服务
- [翻译] 使用 .NET Core 3.0 创建一个 Windows 服务
- 【已解决】使用vncviwer 连接vncserver的时候报错:getnameinfo:无法加载或初始化请求的服务提供程序。(10106)
- 如何:使用反射提供程序创建数据服务(WCF 数据服务)
- 使用CocoaPods来管理iOS程序的依赖和搭建服务
- 使用反射提供程序创建数据服务(WCF 数据服务)
- .net core 使用Autofac依赖注入