当前位置: 首页 > news >正文

深圳建设网站制作wordpress打开图片预览代码

深圳建设网站制作,wordpress打开图片预览代码,有限公司与有限责任公司的区别,域名续费一年多少钱在WPF开发中#xff0c;依赖注入#xff08;Dependency Injection#xff09;和控制反转#xff08;Inversion of Control#xff09;是程序解耦的关键#xff0c;在当今软件工程中占有举足轻重的地位#xff0c;两者之间有着密不可分的联系。今天就以一个简单的小例子依赖注入Dependency Injection和控制反转Inversion of Control是程序解耦的关键在当今软件工程中占有举足轻重的地位两者之间有着密不可分的联系。今天就以一个简单的小例子简述如何在WPF中实现依赖注入和控制反转仅供学习分享使用如有不足之处还请指正。 什么是依赖注入和控制反转 依赖注入又称为依赖项注入那什么是依赖项呢比如在一个类A中实现某中功能而此功能是另外一个类B实现的那就说明A依赖BB就是A的依赖项。或者是另一个对象A所依赖的对象B。示例如下 namespace DemoIoc {public class MessageWriter{public void Print(string message){Console.WriteLine($MessageWriter.Write(message: \{message}\));}}public class Worker : BackgroundService{private readonly MessageWriter writer new();protected override async Task ExecuteAsync(CancellationToken stoppingToken){while (!stoppingToken.IsCancellationRequested){writer.Print($Worker running at: {DateTimeOffset.Now});await Task.Delay(1_000, stoppingToken);}}} } 注意在上述示例中Worker类依赖于MessageWriter类所以MessageWriter就是Worker的依赖项。 硬编码的依赖项如前面的示例会产生问题应避免使用。 强依赖关系具有以下几个问题 如果要用不同的实现替换 MessageWriter必须修改 Worker 类。如果 MessageWriter 具有依赖项则必须由 Worker 类对其进行配置且很难进行初始化。这种实现很难进行单元测试。 那如何解决上述依赖关系所造成的弊端呢答案就是依赖项注入。可通过如下几个步骤实现 使用接口或基类将依赖关系实现抽象化。在服务容器中注册依赖关系。将服务注入到使用它的类的构造函数中。 .NET 提供了一个内置的服务容器 IServiceProvider。 服务通常在应用启动时注册并追加到 IServiceCollection。 添加所有服务后可以使用 BuildServiceProvider 创建服务容器。 框架负责创建依赖关系的实例并在不再需要时将其释放。 简单一句话说依赖注入DI将所依赖的对象参数化接口化并且将依赖对象的创建和释放剥离出来这样就做到了解耦并且实现了控制反转IoC。 控制反转IoC具有如下两个特点 高等级的代码不能依赖低等级的代码抽象接口不能依赖具体实现 控制反转解决代码的强耦合增加了代码的可扩展性。依赖注入将依赖具体实现类和控制实现类的创建和释放变成了依赖接口或抽象类不再控制接口的创建和释放。两者之间相辅相成互相成就。 WPF中实现依赖注入的步骤 1. 安装DI库 首先创建一个WPF应用程序然后在Nuget包管理器中安装微软提供的依赖注入库【Microsoft.Extensions.DependencyInjection】如下所示 2. 创建接口和实现类 创建测试用的接口ITextService和实现类TextService如下所示 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace DemoIoc {public interface ITextService{public string GetText();}public class TextService : ITextService{public string GetText(){return DateTime.Now.ToString(yyyy-MM-dd HH:mm:ss.fff);}} } 3. 接口注入 在需要调用的地方如MainWindow进行ITextService接口注入如下所示 namespace DemoIoc {/// summary/// Interaction logic for MainWindow.xaml/// /summarypublic partial class MainWindow : Window{private ITextService textService;public MainWindow(ITextService textService){this.textService textService;InitializeComponent();}private void Window_Loaded(object sender, RoutedEventArgs e){this.txtCurrentTime.Text textService.GetText();}} } 注意以上可以看出MainWindow依赖ITextService接口而不依赖于接口的实现。这样就实现了依赖注入。 4. 配置容器 在启动程序App.xaml.cs中添加当前对象成员和服务提供对象并在实例化服务对象的时候一次性注册以便在后续需要的时候进行获取。如下所示 namespace DemoIoc {/// summary/// Interaction logic for App.xaml/// /summarypublic partial class App : Application{/// summary/// 获取当前 App 实例/// /summarypublic new static App Current (App)Application.Current;/// summary/// 获取存放应用服务的容器/// /summarypublic IServiceProvider ServiceProvider { get; }public App(){ServiceProvider ConfigureServices();}/// summary/// 配置应用的服务/// /summaryprivate static IServiceProvider ConfigureServices(){var serviceCollection new ServiceCollection().AddSingletonITextService,TextService().AddSingletonMainWindow();return serviceCollection.BuildServiceProvider();}protected override void OnStartup(StartupEventArgs e){var mainWindow ServiceProvider.GetRequiredServiceMainWindow();mainWindow.Show();}} } 注意在此示例中MainWindow通过服务注册的方式进行实例化所以需要删除默认的App.xaml中StartUri属性设置否则将提示默认构造函数不存在。 示例测试 经过上述步骤就实现了WPF中依赖注入和控制反转测试结果如下 说明正常输出则表示依赖注入成功。 参考文档 1. .Net依赖项注入https://learn.microsoft.com/zh-cn/dotnet/core/extensions/dependency-injection 以上就是依赖注入和控制反转的全部内容希望可以抛砖引玉一起学习共同进步。
http://www.dnsts.com.cn/news/13734.html

相关文章:

  • wap版网站 加app提示网站建设 百度云
  • 网站建设怎么设计更加吸引人专业网站建设平台公司
  • 做网站ps分辨率给多少南京市江宁区建设局网站
  • 车辆对比那个网站做的好做电子商务网站 语言
  • 广东建设行业招聘 什么网站网上做夫妻的网站
  • 南阳建设局网站群晖wordpress外网无法仿问
  • ps外包网站优化师是干嘛的
  • 如何做期货培训网站wordpress自定义代码在哪里
  • asp网站ftp入侵上虞做网站
  • 网站建设需求调查表代理记账公司排名前十强
  • 天津做艺术品的网站wordpress换成中文
  • 如何制作手机网站模板湖南建设网站
  • 响应式网站布局淘客网站佣金建设
  • 青海建设局网站南京网站设计制作公司排名榜
  • 大良营销型网站设计公司做论文查重网站代理能赚到钱吗
  • 网站做不做301如何推广网站方法
  • example邮箱注册网站在线一键扒站源码php
  • 网站分类表鞍山 网站建设
  • 国家城乡住房建设部网站首页三室二厅二卫装修效果图
  • 网站建设公司广告公司名logo设计图片
  • 线在科技成都网站推广公司天津全包圆装修公司电话
  • 泰安房产信息网官网首页seo全称
  • 怎样在网站上做超链接苏州网站建设制作工作室
  • 集宁做网站的公司wordpress 年度归档
  • 涉县住房与城乡建设厅网站注册公司名字有没有重复在哪可以查
  • 重庆璧山网站制作公司电话大学 生免费商业网站设计
  • 网站 公众号信息化建设工作wordpress下载类型主题
  • 贵阳网站设计方案公司主页怎么制作
  • flash+xml网站模板手机百度账号登录入口
  • win7怎么做网站服务器在线做ps是什么网站