响应式网站发展机器人软件开发平台
web/
2025/10/3 16:06:29/
文章来源:
响应式网站发展,机器人软件开发平台,全部免费网站软件,外贸获客软件排名前十名点击蓝字关注我们课程链接#xff1a;http://video.jessetalk.cn/course/explore良心课程#xff0c;大家一起来学习哈#xff01;任务16#xff1a;介绍1、依赖注入概念详解从UML和软件建模来理解从单元测试来理解2、ASP.NET Core 源码解析任务17#xff1a;从UML角度来理… 点击蓝字关注我们课程链接http://video.jessetalk.cn/course/explore良心课程大家一起来学习哈任务16介绍1、依赖注入概念详解从UML和软件建模来理解从单元测试来理解2、ASP.NET Core 源码解析任务17从UML角度来理解依赖1、什么是依赖当一个类A完成某个任务需要另一个类B来帮助时A就对B产生了依赖例如CustomerController需要对customer进行新增或查找时用到EF,则对EF的Context产生了依赖var context new CustomerContext(new DbContextOptionsCustomerContext{});2、显示依赖与隐式依赖显示依赖把一个类用到的所有外部组件放到一个类最上面在构造函数里面初始化private CustomerContext _context;public CustomerController(){ _context new CustomerContext(new DbContextOptionsCustomerContext{});}隐式依赖需要用到的地方再初始化不推荐var context new CustomerContext(new DbContextOptionsCustomerContext{});3、依赖倒置原则依赖高层业务不依赖低层业务的具体实现而依赖于具体的抽象CustomerController是高层业务的一个组件依赖于CustomerContext是一个低层数据库的实现如果现在需要把EF换成一个内存的实现或者mysql需要修改CustomerController类风险很大所以应该依赖于低层业务的抽象把低层业务方法抽象比如查找新增抽象出一个接口当不需要使用EF的时候使用内存的实现替换private ICustomerRepository _customerRepository;public CustomerController(){ _customerRepository new EfCustomerRepository( new CustomerContext(new DbContextOptionsCustomerContext{}));}任务18控制反转实现依赖注入的方式不由自己决定而是交给一个IOC容器需要什么由容器传入比如生产环境需要使用EF则由容器传入一个EfCustomerRepository而测试环境需要使用内存级别的则传入一个MemoryCustomerRepositoryprivate ICustomerRepository _customerRepository;public CustomerController(ICustomerRepository customerRepository){ _customerRepository customerRepository;}任务19单元测试var repository new Data.MemoryCustomerRepository();var controller new CustomerController(repository);// 通过外部控制Controller里面的依赖var customer new Model.Customer(){ FirstName Mingson, LastName Zheng, Phone 123456789,};var result controller.Add(customer);Assert.IsTypeOkResult(result);// 正确结果var resultBad controller.Add(customer);Assert.IsTypeBadRequestObjectResult(resultBad);// 错误结果通过单元测试可以得知修改Bug过程中是否误删代码导致原来通过的测试现在无法通过。任务20DI初始化的源码解读Microsoft.AspNetCore.Hosting.WebHostBuilder /// summary /// Builds the required services and an see crefT:Microsoft.AspNetCore.Hosting.IWebHost / which hosts a web application. /// /summary public IWebHost Build() { ...... // 第一步build IServiceCollection serviceCollection1 this.BuildCommonServices(out hostingStartupErrors); // 第二步获取ServiceCollection,ServiceProvider IServiceCollection serviceCollection2 serviceCollection1.Clone(); IServiceProvider providerFromFactory GetProviderFromFactory(serviceCollection1); ...... // 第三步new一个WebHost传入ServiceCollectionServiceProvider WebHost webHost new WebHost(serviceCollection2, providerFromFactory, this._options, this._config, hostingStartupErrors); ...... // 第四步webHost初始化方法Initialize webHost.Initialize(); ...... }第一步BuildCommonServices中new一个ServiceCollection就是在startup接口中使用 private IServiceCollection BuildCommonServices( out AggregateException hostingStartupErrors) { ...... ServiceCollection services new ServiceCollection(); // new完之后添加一些初始化操作 ...... return (IServiceCollection) services; }IStartup接口namespace Microsoft.AspNetCore.Hosting{ public interface IStartup { IServiceProvider ConfigureServices(IServiceCollection services); void Configure(IApplicationBuilder app);// 配置管道 }}第四步webHost初始化方法Initialize public void Initialize() { ...... this.EnsureApplicationServices(); ...... } private void EnsureApplicationServices() { ...... this.EnsureStartup(); this._applicationServices this._startup.ConfigureServices(this._applicationServiceCollection); } private void EnsureStartup() { if (this._startup ! null) return; this._startup this._hostingServiceProvider.GetServiceIStartup(); if (this._startup null) throw new InvalidOperationException(string.Format(No startup configured. Please specify startup via WebHostBuilder.UseStartup, WebHostBuilder.Configure, injecting {0} or specifying the startup assembly via {1} in the web host configuration., (object) IStartup, (object) StartupAssemblyKey)); }任务21依赖注入的使用了解ASP.NET Core 依赖注入看这篇就够了http://www.jessetalk.cn/2017/11/06/di-in-aspnetcore/点“在看”给我一朵小黄花
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/86302.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!