设为首页 加入收藏

TOP

DotNetCore 3.0 助力 WPF 开发(二)
2019-09-17 18:58:23 】 浏览:69
Tags:DotNetCore 3.0 助力 WPF 开发
typeof(MainWindow)); // 在全局容器中配置 AppSettings services.Configure<AppSettings>(Configuration.GetSection(nameof(AppSettings))); // 在全局容器中注册自定义服务 services.AddScoped<ISampleService, SampleService>(); } }

修改完毕后,我们可以尝试编译我们的项目,如果不出意外的啊,我们的程序会正常启动起来。这里就不做截图说明了。

看了上述代码,是不是觉得很有意思啊,这种全新的开发模式顿时把我们的代码水平提升了好几个档次。这种使用方式和在 AspDotNetCore 简直一摸一样。比如,我们在上面注册了 AppSettings 和一个基于 ISampleService 接口的实现 SampleService,那么我们就可以在 MainWindow 的构造函数中使用,比如,我们可以参考下面的示例代码:

    public partial class MainWindow : Window
    {
        private readonly ISampleService _sampleService;
        private readonly IOptions<AppSettings> _settings;
        public MainWindow(ISampleService sampleService, IOptions<AppSettings> settings)
        {
            InitializeComponent();

            _sampleService = sampleService;
            var val = _sampleService.GetCurrentDate();

            _settings = settings;
        }

        private void ButtonExit_Click(object sender, RoutedEventArgs e)
        {
            Application.Current.Shutdown();
        }
    }

然后,我们可以监视一下 **_settings** 的值,如下图所示:

通过这个简单的例子,我们可以看到这种全新方式的依赖注入已经得到微软的大力支持,将基于 .NetCoreCS模式BS模式 开发方式进行了统一,学习曲线是不是又下降了很多啊。

使用 HttpClientFactory

众所周知,HttpClient 在实际的使用场景中还是存在一些弊端,在 DotNetCore 的 Web 端中,很多同学用了 HttpClientFactory 如鱼得水,减少了很多不必要的麻烦。现在,我们同样可以将这一利器在 WPF 中使用。

我们新建一个基于 DotNetCore 3.0 的 WPF 项目,然后引入如下包:

  • Microsoft.Extensions.DependencyInjection
  • Microsoft.Extensions.Http

然后,修改我们的 App.xaml 文件,删除掉默认添加的启动视图代码 StartupUri="MainWindow.xaml",并修改 App.xaml.cs 文件,示例代码如下所示:

public partial class App : Application
{
    public ServiceProvider ServiceProvider { get; private set; }

    protected override void OnStartup(StartupEventArgs e)
    {
        var serviceCollection = new ServiceCollection();
        ConfigureServices(serviceCollection);

        ServiceProvider = serviceCollection.BuildServiceProvider();

        var mainView = ServiceProvider.GetRequiredService<MainWindow>();
        mainView.Show();

        base.OnStartup(e);
    }

    private void ConfigureServices(ServiceCollection services)
    {
        services.AddHttpClient();
        services.AddTransient(typeof(MainWindow));
    }
}

最后,修改我们的 MainWindow.xaml.cs 文件,示例代码如下所示:

public partial class MainWindow : Window
{
    private readonly IHttpClientFactory _httpClientFactory;
    public MainWindow(IHttpClientFactory httpClientFactory)
    {
        InitializeComponent();

        _httpClientFactory = httpClientFactory;
    }

    private async void ButtonExit_Click(object sender, RoutedEventArgs e)
    {
        var client = _httpClientFactory.CreateClient();
        var html = await client.GetStringAsync("http://www.baidu.com");
        //Application.Current.Shutdown();
    }
}

这就是关于 HttpClientFactory 的简单使用。

使用 EFCore

最后介绍的一大利器就是巨硬的 EFCore,这个东西也很溜,值得我们尝试使用。这里我使用 Sqlite 为例。

我们新建一个基于 DotNetCore 3.0 的 WPF 项目,然后引入如下包:

  • Microsoft.Extensions.DependencyInjection
  • Microsoft.Extensions.Configuration.FileExtensions
  • Microsoft.Extensions.Configuration.Json
  • Microsoft.EntityFrameworkCore.Sqlite

首先,我们参考上面提到的使用方式,在项目根目录下创建一个 appsettings.json,文件,修改内容如下所示:

{
  "ConnectionStrings": {
    "SqlConnection": "datasource = default.sqlite"
  }
}

然后将该文件的 Build Action 设置为 ContentCopy To Output Directiory 设置为 Copy if newer

接着,我们创建一个 DataContext 类,示例代码如下所示:

public class DataContext : DbContext
{
    public DataContext(DbContextOptions options) : base(options)
    {
        this.Database.Mig
首页 上一页 1 2 3 下一页 尾页 2/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇用C#中的键值对遍历数组或字符串.. 下一篇visual studio 2019安装秘钥

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目