热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ASP.NETCore源码解析Startup.cs(一)

本篇已收录至asp.netcore随笔系列Referencehttps:docs.microsoft.comen-usaspnetcorefundamentalsstartup?v

本篇已收录至 asp.net core 随笔系列


Reference

https://docs.microsoft.com/en-us/aspnet/core/fundamentals/startup?view=aspnetcore-2.2


startup.cs

首先看看自动为我们创建的startup文件内容都有什么?

一共分为四部分, 分别是:构造函数, 属性, 和两个方法. 其中构造函数传递的参数将属性赋值, 这个就不详细说了. 我们主要看提供的两个方法, ConfigureServices 以及 Configure. 这两个方法俗称约定方法. 暴露给开发者的目的是让开发者自行构建方法体, 通过不同的构建达到一个非常灵活的配置的目的.


ConfigureServices(IServiceCollection services)

// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.Configure(optiOns=>
{
// This lambda determines whether user consent for non-essential COOKIEs is needed for a given request.
options.CheckCOnsentNeeded= cOntext=> true;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}

从方法的注释中可以知道, 这个方法是在运行的时候被调用的. 使用这个方法对 container 进行add service.

一般提到 Container 我们都知道是容器, 涉及到IOC的概念. 也就是说这个方法是指 在运行的时候被调用, 然后向IOC的容器中注入service. 那么既然是对容器进行注册, 我们不仅可以使用低层已有的一些service, 比如例子中给出的, AddMvc() , 或者我们自己写一些 service, 将它们'注册'到 services 中,

services.AddScoped();

或者使用低层提供的 service. 我列出我目前知道的, 以后还会逐渐补充:


IHostingEnvironment 提供环境信息的 service.

IConfiguration 提供读取config.

ILoggerFactory 创建log对象.


例子我写到下面:

private readonly IHostingEnvironment _env;
private readonly IConfiguration _config;
private readonly ILoggerFactory _loggerFactory;
public Startup(IHostingEnvironment env, IConfiguration config,
ILoggerFactory loggerFactory)
{
_env = env;
_cOnfig= config;
_loggerFactory = loggerFactory;
}
public void ConfigureServices(IServiceCollection services)
{
services.Configure(optiOns=>
{
// This lambda determines whether user consent for non-essential COOKIEs is needed for a given request.
options.CheckCOnsentNeeded= cOntext=> true;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
var logger = _loggerFactory.CreateLogger();
if (_env.IsDevelopment())
{
// Development service configuration
logger.LogInformation("Development environment");
}
else
{
// Non-development service configuration
logger.LogInformation($"Environment: {_env.EnvironmentName}");
}
}

当然除了向 Container 中注册 service, 还可以通过这个方法去配置低层的具体使用哪种 IOC 容器, 这也是可以的.


小结

思考一下. 如果将代码进行分层, services 是暴露给开发人员的对象, 开发人员使用这个对象进行操作(addMvc..), services 属于中间层, 但是底层是如何使用 services 呢? 这里是我之前写的一篇解析, 很浅显的介绍了一下底层是如何对 services 进行操作的. 有兴趣的话可以看看. program.cs解读. 在 .UseStartup() 时解读了具体开发人员所配置的 service 是如何在底层被使用的.


Configure(IApplicationBuilder app, IHostingEnvironment env)

// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseCOOKIEPolicy();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{cOntroller=Home}/{action=Index}/{id?}");
});
}

Configure 这个方法也是运行时才调用的.


IApplicationBuilder


IHostingEnvironment


总结

看完网上的各种材料以及官方文档后, 个人觉得, 怎么灵活使用 startup 真的是考验一个开发者对于 asp.net core 技术的掌握程度的一个很好的切入点. 因为太灵活, 所以能够讲清楚讲全面的就会很困难. 所以我会继续补充完善这篇文档.



推荐阅读
  • 本文将带你快速了解 SpringMVC 框架的基本使用方法,通过实现一个简单的 Controller 并在浏览器中访问,展示 SpringMVC 的强大与简便。 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • 如何撰写适应变化的高效代码:策略与实践
    编写高质量且适应变化的代码是每位程序员的追求。优质代码的关键在于其可维护性和可扩展性。本文将从面向对象编程的角度出发,探讨实现这一目标的具体策略与实践方法,帮助开发者提升代码效率和灵活性。 ... [详细]
  • 尽管我们尽最大努力,任何软件开发过程中都难免会出现缺陷。为了更有效地提升对支持部门的协助与支撑,本文探讨了多种策略和最佳实践,旨在通过改进沟通、增强培训和支持流程来减少这些缺陷的影响,并提高整体服务质量和客户满意度。 ... [详细]
  • Spring框架的核心组件与架构解析 ... [详细]
  • 在软件开发过程中,经常需要将多个项目或模块进行集成和调试,尤其是当项目依赖于第三方开源库(如Cordova、CocoaPods)时。本文介绍了如何在Xcode中高效地进行多项目联合调试,分享了一些实用的技巧和最佳实践,帮助开发者解决常见的调试难题,提高开发效率。 ... [详细]
  • 深入解析Struts、Spring与Hibernate三大框架的面试要点与技巧 ... [详细]
  • 在对WordPress Duplicator插件0.4.4版本的安全评估中,发现其存在跨站脚本(XSS)攻击漏洞。此漏洞可能被利用进行恶意操作,建议用户及时更新至最新版本以确保系统安全。测试方法仅限于安全研究和教学目的,使用时需自行承担风险。漏洞编号:HTB23162。 ... [详细]
  • 本文介绍了 Vue 开发的入门指南,重点讲解了开发环境的配置与项目的基本搭建。推荐使用 WebStorm 作为 IDE,其下载地址为 。安装时请选择适合您操作系统的版本,并通过 获取激活码。WebStorm 是前端开发者的理想选择,提供了丰富的功能和强大的代码编辑能力。 ... [详细]
  • AIX编程挑战赛:AIX正方形问题的算法解析与Java代码实现
    在昨晚的阅读中,我注意到了CSDN博主西部阿呆-小草屋发表的一篇文章《AIX程序设计大赛——AIX正方形问题》。该文详细阐述了AIX正方形问题的背景,并提供了一种基于Java语言的解决方案。本文将深入解析这一算法的核心思想,并展示具体的Java代码实现,旨在为参赛者和编程爱好者提供有价值的参考。 ... [详细]
  • 深入解析HTTP网络请求API:从基础到进阶的全面指南
    本文全面解析了HTTP网络请求API,从基础到进阶,详细介绍了Android平台上的两种原生API——HttpUrlConnection和HttpClient。这两种API通过对底层Socket的封装,提供了高效、灵活的网络通信功能。文章不仅涵盖了基本的使用方法,还深入探讨了性能优化、错误处理和安全性等方面的高级主题,帮助开发者更好地理解和应用这些工具。 ... [详细]
  • 分布式开源任务调度框架 TBSchedule 深度解析与应用实践
    本文深入解析了分布式开源任务调度框架 TBSchedule 的核心原理与应用场景,并通过实际案例详细介绍了其部署与使用方法。首先,从源码下载开始,详细阐述了 TBSchedule 的安装步骤和配置要点。接着,探讨了该框架在大规模分布式环境中的性能优化策略,以及如何通过灵活的任务调度机制提升系统效率。最后,结合具体实例,展示了 TBSchedule 在实际项目中的应用效果,为开发者提供了宝贵的实践经验。 ... [详细]
  • 在基于.NET框架的分层架构实践中,为了实现各层之间的松散耦合,本文详细探讨了依赖注入(DI)和控制反转(IoC)容器的设计与实现。通过合理的依赖管理和对象创建,确保了各层之间的单向调用关系,从而提高了系统的可维护性和扩展性。此外,文章还介绍了几种常见的IoC容器实现方式及其应用场景,为开发者提供了实用的参考。 ... [详细]
  • 在CentOS上部署和配置FreeSWITCH
    在CentOS系统上部署和配置FreeSWITCH的过程涉及多个步骤。本文详细介绍了从源代码安装FreeSWITCH的方法,包括必要的依赖项安装、编译和配置过程。此外,还提供了常见的配置选项和故障排除技巧,帮助用户顺利完成部署并确保系统的稳定运行。 ... [详细]
  • 本文作为“实现简易版Spring系列”的第五篇,继前文深入探讨了Spring框架的核心技术之一——控制反转(IoC)之后,将重点转向另一个关键技术——面向切面编程(AOP)。对于使用Spring框架进行开发的开发者来说,AOP是一个不可或缺的概念。了解AOP的背景及其基本原理,对于掌握这一技术至关重要。本文将通过具体示例,详细解析AOP的实现机制,帮助读者更好地理解和应用这一技术。 ... [详细]
author-avatar
渺渺珍人较_628
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有