如何为 .NET Core 3.0 中 WPF 配置依赖注入 ?

咨询区

  • user842818

我非常熟悉 ASP.NET Core 和它开箱即用的依赖注入支持,当 Controller 需要依赖注入时,可以在 构造函数 中以参数的形式来实现,这个IOC的理念相当好,我想把它带到 WPF 中,当我同样以构造函数的方式进行注入却无法实现。

请问我该如何修改让 WPF 支持呢,我真的很喜欢IOC。

回答区

  • maytham-ɯɐɥʇʎɐɯ

我最近在一个项目也需要实现这个功能,我是这样实现的。

首先需要创建一个 WPF Core 3 的项目,然后从 nuget 上安装依赖包: Microsoft.Extensions.DependencyInjection

在我的项目中,我创建了一个 LogBase 类用来记录日志,这里我就拿它来做例子。


private readonly ServiceProvider _serviceProvider;public App()
{var serviceCollection = new ServiceCollection();ConfigureServices(serviceCollection);_serviceProvider = serviceCollection.BuildServiceProvider();
}private void ConfigureServices(IServiceCollection services)
{services.AddSingleton<ILogBase>(new LogBase(new FileInfo($@"C:\temp\log.txt")));services.AddSingleton<MainWindow>();
}private void OnStartup(object sender, StartupEventArgs e)
{var mainWindow = _serviceProvider.GetService<MainWindow>();mainWindow.Show();
}

然后在 App.xaml 中添加 Startup="OnStartup" ,比如下面这样:


<Application x:Class="VaultDataStore.Wpf.App"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:local="clr-namespace:VaultDataStore.Wpf"Startup="OnStartup"><Application.Resources></Application.Resources>
</Application>

接下来我就可以将 ILogBase 注入到构造函数中,如下代码所示:


private readonly ILogBase _log;public MainWindow(ILogBase log)
{_log = log;...etc.. you can use _log over all in this class
}

完整的代码,我上传到了 github:https://github.com/maythamfahmi/WpfSampleDi

点评区

自打.NET Core 面市以来,IOC 逐渐盛行,现在已经很难在代码中看到 new 了,取而代之的是满屏的 await,async ????,时代在变,我们也得跟上。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/300537.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

百度家电行业报告摘录

上图反映了关注家电信息的网民在百度频道的活跃情况。很明显&#xff0c;百度贴吧、百度图片和百度知道是网民最活跃的频道&#xff0c;特别是百度贴吧&#xff0c;有超过四分之一的检索量都来自于百度贴吧。百度有不少以家电品牌或产品为主题的贴吧&#xff0c;比如海尔吧、TC…

如何识别能把桥压塌的大车?快看!能救命!

全世界只有3.14 % 的人关注了青少年数学之旅2019年10月10日晚6:10左右&#xff0c;江苏无锡市北环路附近一高架桥出现桥面侧翻&#xff0c;经现场初步勘测&#xff0c;桥下被压小车3辆&#xff08;其中一辆系停放车辆&#xff0c;无人&#xff09;。经搜救确认&#xff0c;事故…

如何用outlook express 收发邮件

一&#xff0e;创建用户1.打开Outlook express软件&#xff0c;单击“工具”选项&#xff0c;选择“帐户”选项。2.单击“添加”按钮&#xff0c;选择“邮件”选项。3.在“连接向导”中&#xff0c;输入发件人姓名&#xff0c;在对方收到邮件后&#xff0c;发件人姓名将会显示在…

java虚拟机 山寨机_十年前的山寨机居然有系统?没错,还是纯国产的

文丨太平洋数码苍茫的天涯是我的爱&#xff0c;绵绵的青山脚下花正开&#xff0c;什么样的节奏是最呀最摇摆……你是我天边最美的云彩&#xff0c;让我用心把你留下来(留下来)……不知道大家是否还记得这段熟悉的旋律&#xff0c;总之小编我今天再次回听这首歌的时候身体依然会…

高人写的浙大简史(转)

1997年&#xff0c;浙大100岁&#xff0c;虽人到中年&#xff0c;且老伴在1952年便已与之离婚&#xff0c;但大儿子玉泉已长大成人&#xff0c;在工厂从事技术工作&#xff0c;表现优秀&#xff1b;二儿子之江右腿瘫痪行动不便&#xff0c;几乎无劳动能力&#xff0c;靠其大哥供…

dotnet中的counters说明(一)

在dotnet中&#xff0c;常用的收集指标有&#xff1a;System.Runtime 计数器Microsoft.AspNetCore.Hosting计数器Microsoft.AspNetCore.Http.Connections计数器Microsoft-AspNetCore-Server-Kestrel计数器System.Net.Http计数器(>.NET5可用)System.Net.NameResolution计数器…

当才华还撑不起梦想时,你应该静下心来看这些

全世界只有3.14 % 的人关注了青少年数学之旅在工作之余&#xff0c;我们大量的碎片时间被手机占据。无意识的刷手机打发无聊&#xff0c;不如有趣又高品质的积累。我们特意精选了在不同领域的几个高品质公众号代表&#xff0c;希望让你在快乐打发闲暇时光的同时&#xff0c;也能…

统一威胁管理

回顾2004年以及已经走过一半的2005年&#xff0c;国内信息安全市场的发展有一些明显的轨迹可循。首先是技术创新开始受到市场的热烈回应&#xff0c;这说明国内的信息安全用户已经对产品价值进行正确的认知。另一个趋势是用户的安全需求在从安全产品向整体解决方案转移。广大用…

如何使用Git

http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000 廖雪峰的博客。 从零起步的Git教程&#xff0c;让你无痛苦上手世界上最流行的分布式版本控制系统Git&#xff01; 既然号称史上最浅显易懂的Git教程&#xff0c;那这个教程有什么让你怦然…

java中static x 5_java中static作用详解

static表示“全局”或者“静态”的意思&#xff0c;用来修饰成员变量和成员方法&#xff0c;也可以形成静态static代码块&#xff0c;但是Java语言中没有全局变量的概念。被static修饰的成员变量和成员方法独立于该类的任何对象。也就是说&#xff0c;它不依赖类特定的实例&…

.net core ——微服务内通信Thrift和Http客户端响应比较

1、Benchmark介绍wiki中有定义&#xff1a;基准测试是运行计算机程序&#xff0c;一组程序或其他操作的行为&#xff0c;以便评估对象的相对性能&#xff0c;通常是通过对其运行许多标准测试和试验。目前许多成熟的github开源项目&#xff0c;均采用Benchmark测试结果作为性能依…

今日最佳:你爸爸给你取名的时候。。。

全世界只有3.14 % 的人关注了青少年数学之旅&#xff08;视频源于枫潇潇兮&#xff09;

Discuz添加自定义模板广告

在做Discuz中广告的时候碰到个大问题&#xff0c;现在我需要做一个轮播的通屏广告位&#xff0c;调用广告图片的代码应该是以下代码&#xff1a;<ul> <li style"background:url(图片地址) no-repeat center top;"><a href"#"></a…

kafka偏移量保存到mysql里_Kafka 新版消费者 API(二):提交偏移量

1. 自动提交最简单的提交方式是让消费者自动提交偏移量。如果 enable.auto.commit 被设为 true&#xff0c;那么每过 5s&#xff0c;消费者会自动把从 poll() 方法接收到的最大偏移量提交上去。提交时间间隔由 auto.commit.interval.ms 控制&#xff0c;默认值是5s。消费者每次…

我居然手写了Spring框架

手写完了刚参加工作那会接触java还是用的struct的时代&#xff0c;后面在SSH火爆时代的时候我转战.net,多年之后公司转java技术栈已经是Spring的天下&#xff0c;源码嚼了很多遍于是很想尝试把这套东西用在.net平台上。社区有个Spring.net项目已经多年不维护了&#xff0c;而且…

下班以后看什么,决定你人生的高度

全世界只有3.14 % 的人关注了青少年数学之旅王小波说&#xff1a;我活在世上&#xff0c;无非想要明白些道理&#xff0c;遇见些有趣的事&#xff0c;倘能如我所愿&#xff0c;我的一生就算成功。你的圈子将决定你的人生。每一位对事物都有着独特的态度让你成为一个有趣的人。今…

Mahout的taste推荐系统里的几种Recommender分析

Taste简介 看自:http://blog.csdn.net/zhoubl668/article/details/13297583Mahout 是apache下的一个java语言的开源大数据机器学习项目&#xff0c;与其他机器学习项目不同的是&#xff0c;它的算法多数是mapreduce方式写的&#xff0c;可以在hadoop上运行&#xff0c;并行化处…

[2007最后一博]Url地址重写,利用HttpHander手工编译页面并按需生成静态HTML文件...

很多朋友可能都讨论过ASP.NET中生成HTML的方法了&#xff0c;有按照模板用IO方法写文件 有在404错误页面内生成HTML的&#xff0c;有在Render内保存页面输出到HTML文件的。 今天我发一个配合Url重写利用HttpHander手工编译.aspx页面方法。 HTML文件的方法&#xff0c;可按需、“…

found.000文件夹的问题

found.000文件夹的问题问&#xff1a;我的电脑有的时候在C盘或D盘的根目录下有个名为found.000的文件夹&#xff0c;里面有一些后缀名为CHK的文件。在c:windows下有很多以fff开头的怪文件&#xff0c;而且大小全部为0字节。请问这些是什么文件&#xff1f;能否将它们删除&#…

bytecode java_Java 字节码解读

一、源代码public classPeople {privateString name;private intage;}二、利用Javap 反编译查看字节码结构信息javap -v People.class结果如下Classfile /D:/work/byte-code/src/People.classLast modified2020-12-9; size 240bytesMD5 checksum 54b8c1ad94a9c9cf5074fd8520454…