设计网站定制公司百度收录申请

bicheng/2026/1/25 0:28:25/文章来源:
设计网站定制公司,百度收录申请,开发软件开发外包,钱包网站建设我们知道依赖注入#xff08;DI#xff09;是一种实现对象及其协作者或依赖关系之间松散耦合的技术。 ASP.NET Core包含一个简单的内建容器来支持构造器注入。我们试图将DI的最佳实践带到.NET Core应用程序中#xff0c;这表现在以下方面#xff1a;构造器注入注册组件DI i… 我们知道依赖注入DI是一种实现对象及其协作者或依赖关系之间松散耦合的技术。 ASP.NET Core包含一个简单的内建容器来支持构造器注入。我们试图将DI的最佳实践带到.NET Core应用程序中这表现在以下方面构造器注入注册组件DI in testing构造器注入我们可以通过方法注入、属性注入、构造器注入的方式来注入具体的实例一般来说构造器注入的方式被认为是最好的方式所以在应用程序中将使用构造器注入请避免使用别的注入方式。一个构造器注入的例子如public class CharacterRepository : ICharacterRepository{    private readonly ApplicationDbContext _dbContext;    public CharacterRepository(ApplicationDbContext dbContext)    {        _dbContext dbContext;    }}注册组件到容器在使用DI之前需要告诉容器组件之间的对应关系例如container.RegisterIAService, AService();所以当你使用构造器注入的时候你告诉构造函数需要注入IAService类型的实例容器会根据你之前注册的对应关系创建AService的实例。看起来一切都很简单但在实际应用过程中并没有这么简单试想在一个项目中组件有成千上万个这成千上万个组件之间的对应关系怎么样维护一个稍微改进点的策略根据这些组件的职责分类把某一类组件的对应关系抽取成方法private void RegisterApplicationServices(Container container){    container.RegisterIAApplicationService, AApplicationService();    container.RegisterIBApplicationService, BApplicationService();    //...}private void RegisterDomainServices(Container container){    container.RegisterIADomainService, ADomainService();    container.RegisterIBDomainService, BDomainService();    //...}private void RegisterOtherServices(Container container){    container.RegisterIDataTimeSource, DataTimeSource();    container.RegisterIUserFetcher, UserFetcher();    //...}这两个分类有什么特点呢第一个方法试图把所有的ApplicationService的组件对应关系汇总在一起第二个方法试图把所有的DomainService的组件对应关系汇总在一起比起之前已经有了很大的进步。不过随着组件的增加你需要不断修改这几个方法。基于公共接口来注册组件第一个方法已经找到了同一类的组件既然这些组件的性质是一样的就可以用同样的接口来表示定义一个空接口用来表示ApplicationService:public interface IApplicationService {}public interface IAApplicationService : IApplicationService { //.. }public interface IBApplicationService : IApplicationService { //.. }一旦这些组件有了公共特点尝试创建下面的扩展container.Register(Classes.FromAssembly().BaseOnIApplicationService().WithDefaultInterface());这句代码的意思是显而易见的扫描某个程序集找到所有实现了IApplicationService的类进而把组件的对照关系注册到了容器中。当组件拥有多个接口类是可以拥有多个接口的在实际开发中这样的设计也是很常见的public interface IOptions { //... }public interface IAlipayOptions : IOptions { //... }public class AlipayOptions: IAlipayOptions { //... }利用上面介绍的扩展注册所有Options:container.Register(Classes.FromAssembly().BaseOnIOptions().WithDefaultInterface());尝试通过下面的构造器注入public AlipayPayment(IAlipayOptions alipayOptions) { //... }工作的很好没有问题。但是当我们试图从容器里拿到所有的IOptions类型container.ResolveAllIOptions();你得不到任何IOptions类型的实例原因在于向容器注册对应关系的过程是一对一的我们之前的扩展.WithDefaultInterface()只注册了AlipayOptions和IAlipayOptions的关系如果想通过上面的方式拿到所有继承了IOptions的实例则需要使用另一个扩展container.Register(Classes.FromAssembly().BaseOnIOptions().WithAllInterfaces());把注册文件放在正确的位置我们通过分层的方式隔离了不同职责的程序集最终Web/API项目将会引用这些低层的程序集。要想把 Web/API启动起来需要把所有程序集定义的组件注册在Web/API项目的容器中。我们把Web/API这种能够启动的程序集叫做客户端。所以一个典型的客户端需要通过下面代码来注册DI容器container.Register(Classes.FromAssembly().BaseOnIApplicationService().WithDefaultInterface());container.Register(Classes.FromAssembly().BaseOnIDomainService().WithDefaultInterface());//...// 还有其他无法用公共接口表示的组件这些组件可能来自于低层服务container.RegisterIDateTimeSource, DateTimeSource();container.RegisterIUserFetcher, UserFetcher();//...这段代码描述了一个现象Web/API客户端对低层的组件对应关系一清二楚违反了Tell, Dont Ask Priciple. 正确的做法是Web/API客户端告诉低层组件帮我安装你所在的程序集中所有的组件对应关系。// 安装所有services.Install(FromAssembly.ContainsIApplicationService());services.Install(FromAssembly.ContainsIDomainService());services.Install(FromAssembly.ContainsIOtherService());具体的组件对应关系应该定义在相应的程序集中。这一节的思想都来源于Windsor Castle。DI in testing人们在不断讨论单元测试的各种风格和差异类似于通过Mock来管理依赖的单元测试被认为是一种反模式。见To Kill a Mockingtest, 而DI的另一个功能在于便于写出有价值和有效的单元测试。当你选择测试一个组件时实际上要花很多的时间来准备依赖数据这是显而易见的因为组件并不是独立存在的。试想如果你能从容器中拿到这个组件容器就会将所有的依赖关系创建好。但是问题来了比如说你的被测试组件依赖了一个能够给第三方发送请求的组件这显然并不是你所期望的你只需要注册一个假的事先准备好的组件即可。对ApplicationServiceTests的组件注册如下container.Install(FromAssembly.ContainsFakedComponentsInstaller());//..Register other components that ApplicationService depend on一个对SearchService的测试如下[Fact]public async void WhenInputDataIsValidShouldGetSearchResult(){    //Arrage    var searchService _container.ResolveISearchService();    var searchModel SearchModelBuilder.Default().Build();    //Act    var result await searchService.Search(searchModel);    //Assert    result.Count.Should().BeGreaterThan(0);}原文地址https://www.cnblogs.com/xiandnc/p/9407856.html.NET社区新闻深度好文欢迎访问公众号文章汇总 http://www.csharpkit.com

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

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

相关文章

三亚学做网站培训wordpress 拍卖插件

题目描述 输入n个整数&#xff0c;将其中的奇数和偶数分别显示出来&#xff08;1 < n < 30&#xff09; 输入 第一行&#xff1a;一个整数n。第二行&#xff1a;n个空格隔开的整数。 输出 第一行&#xff1a;若干个奇数。第二行&#xff1a;若干个偶数。&#xff08…

自助建站免费申请徐州网站制作怎么做

1、Service的种类 按运行地点分类&#xff1a; 类别区别 优点缺点 应用本地服务&#xff08;Local&#xff09;该服务依附在主进程上&#xff0c; 服务依附在主进程上而不是独立的进程&#xff0c;这样在一定程度上节约了资源&#xff0c;另外Local服务因为是在同一进程因此不…

做网站快速排名软件wordpress 插件反复安装

安装electron时候&#xff0c;出现RequestError:socket hang up这样的错误&#xff0c;找了半天很多方式都是用旧淘宝源&#xff0c;导致根本安装不上去。 在项目的根目录下创建.npmrc文件&#xff0c;添加以下内容 # registryhttps://mirrors.huaweicloud.com/repository/np…

做静态网站工资多少wordpress 薄荷主题

射频前端芯片在模拟芯片中&#xff0c;属于进入门槛较高、设计难度较大的细分领域&#xff0c;由于国内射频前端芯片行业起步较晚&#xff0c;其市场份额主要被外企所占据&#xff0c;而在国产化浪潮的推动下&#xff0c;上游厂商的射频前端产品及技术逐渐具备领先的竞争优势。…

seo移动网站页面怎么做电子商务适合女生学吗

最近很多朋友留言问&#xff0c;ufs3.1是什么&#xff0c;很重要吗&#xff1f;下面就由小编来给大家介绍一下手机上的ufs3.1是什么&#xff01;ufs是高端安卓手机&#xff0c;常用的储存协议&#xff0c;就好像我们电脑里的固态硬盘一样&#xff0c;速度越快&#xff0c;打开软…

网站修改建议优设网app

这四个概念分别代表不同的工具和框架&#xff0c;它们的主要区别如下&#xff1a; Simple App&#xff1a;这通常指的是一个基础的、最小化的应用程序。它可能只包含最基础的功能&#xff0c;如用户界面、一些简单的交互等。这种应用程序通常用于学习和实验目的&#xff0c;或者…

宁波高新区做网站的公司网站建设找哪一家好

客户端注册临时实例&#xff0c;GRPC处理 客户端服务发现 及订阅处理

jw网站设计wordpress 调用文章 分页

前言 我们想一个问题&#xff0c;我们写的C语言代码都是文本信息&#xff0c;电脑能直接执行c语言代码吗&#xff1f;肯定不能啊&#xff0c;计算机能执行的是二进制指令&#xff0c;所以将C语言转化为二进制指令需要一段过程&#xff0c;这篇博客讲一下编译与链接&#xff0c;…

中国建设银行网官方网站焦作建设银行网站

int maxMemory (int) (Runtime.getRuntime().maxMemory() / 1024); Log.d("TAG", "Max memory is " maxMemory "KB"); 转载于:https://www.cnblogs.com/coderwjq/p/6501639.html

国际国内新闻最新消息今天seo经验是什么

目录 一、AlexNet卷积神经网络结构模型 1、数据库ImageNet 2、AlexNet第一层卷积层 二、AlexNet卷积神经网络的改进 1、非线性变化函数的改变——ReLU 2、最大池化&#xff08;Max Pooling&#xff09;概念的提出——卷积神经网络通用 1&#xff09;池化层 2&#xff0…

出售家教网站模板沈阳人流

咨询区 Stefan Steiger我有一个 Console 程序&#xff0c;它主要用来重启 IIS 以及删除临时文件&#xff0c;我现在期望它启动后隐藏自身&#xff0c;我在网上找了下面这段代码做了隐藏。static void Main(string[] args) {var currentProcess System.Diagnostics.Process.Get…

德阳市做网站店铺设计属于什么设计

1 从输⼊ URL 到⻚⾯展示到底发⽣了什么&#xff1f; 1. 先检查浏览器缓存⾥是否有缓存该资源&#xff0c;如果有直接返回&#xff1b;如果没有进⼊下⼀ 步⽹络请求。 2. ⽹络请求前&#xff0c;进⾏ DNS 解析 &#xff0c;以获取请求域名的 IP地址 。 3. 浏览器与服务器…

怎么做几个版面的网站做一个宣传网站要多少钱

题目 输入一个不含重复数字的数据集合&#xff0c;请找出它的所有子集。例如&#xff0c;数据集合[1&#xff0c;2]有4个子集&#xff0c;分别是[]、[1]、[2]和[1&#xff0c;2]。 分析 如果集合中包含n个元素&#xff0c;那么生成子集可以分为n步&#xff0c;每一步从集合中…

广州易网外贸网站建设成都网络维护

软考高级系统架构设计师系列论文真题六:论信息系统的安全性与保密性设计 一、论信息系统的安全性与保密性设计二、找准核心论点三、理论素材准备四、精品范文赏析1.摘要2.正文3.总结软考高级系统架构设计师系列论文之:百篇软考高级架构设计师论文范文软考高级系统架构设计师系…

重庆seo网站策划网站建设厃金手指花总十一

组了一套&#xff0c;不知道行不行 windows11GPURTX 4050python3.7.12tensorflow-gpu1.15.0cudatoolkit10.0.130cudnn7.6.5Keras2.3.1

模板网站建站代运营网站

项目地址&#xff1a; https://github.com/chatchat-space/Langchain-Chatchat 快速上手 1. 环境配置 首先&#xff0c;确保你的机器安装了 Python 3.8 - 3.11 (我们强烈推荐使用 Python3.11)。 $ python --version Python 3.11.7接着&#xff0c;创建一个虚拟环境&#xff…

wordpress网站mip改造静态网站制作模板

题解:LeetCode题解 解题思想&#xff1a; 通过创建辅助指针来解决该问题 当当前节点cur不为空的时候&#xff0c;创建辅助节点dummy&#xff0c;使其一直作为每一层的第一个节点的前一个节点。 创建辅助指针pre&#xff0c;pre初始指向dummy&#xff0c;之后通过pre来填充当前层…

wordpress著名网站网站建设合同规定

本次先看书学习&#xff0c;并完成了课后习题&#xff0c;题目出自《单片机原理与接口技术》第五版—李清朝 答: &#xff08;1&#xff09;当 CPU正在处理某件事情的时候&#xff0c;外部发生的某一件事件请求 CPU 迅速去处理&#xff0c;于是&#xff0c;CPU暂时中止当前的工…

网站开发培训设计百度信息流网站可以做落地页吗

这章把脚本任务访问FTP的方法 全部给大家。 控件的使用大家如果有不懂得可以看下我之前的文章。第一章&#xff1a;SSIS 学习之旅 第一个SSIS 示例&#xff08;一&#xff09;&#xff08;上&#xff09; 第二章&#xff1a;SSIS 学习之旅 第一个SSIS 示例&#xff08;二&#…

html5手机移动app网站制作教程企业服务总线

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 | AlfredWu来源 | Alfred数据室最近&#xff0c;悄悄上线的《长安十二时辰》在朋友圈被吹爆了&#xff1a;年度最佳古装剧、服道化精致、电影质感、良心剧等赞美的声音不绝于耳。该剧首播时在豆瓣拿到了8.8的高分&#xff0c;但…