文档章节

asp.net5 的应用启动

noonoo
 noonoo
发布于 2015/12/20 22:56
字数 1513
阅读 53
收藏 0

参考来源:

http://docs.asp.net/en/latest/conceptual-overview/aspnet.html

http://docs.asp.net/en/latest/fundamentals/startup.html

asp.net5应用是运行在dnx之上的,每一个程序都是一个dnx项目,通过 Microsoft.AspNet.Hosting 这个包来加载的。

与Node.js做个类比:

node.exe    index.js  相当于node这个程序打开代码文件,加载运行。

                                  在进程里增加一个Node.js: Server-side JavaScript的进程,占空间7.6MB。

dnx web    相当于dnx程序搜索当前目录,找到project.json,并找到里面相应的命令,然后加载相应的代码并运行。

                  我机器是64位的win10.,在进程里增加一个dnx(32位)的进程,在我机器上大概28MB的内存。  

public class Startup{
     public void ConfigureServices(IServiceCollection services)
     {
     //定义用户服务
     }

     public void Configure(IApplicationBuilder app)
     {
     //定义中间件
     }}

Services:

底层是通过DI 而创建的组件,用于通用部分。服务有三种:单件、局部作用域、即时服务。

即时服务,每次使用都创建。局部作用域服务是每次请求时,创建一个作业域。单件服务是全局只有一个的服务。

Middleware

中间件是asp.net5处理时每个请求管道。它处理HttpContext  上的异步逻辑,并且可以按顺序调用之后的中间件,也可以随时中断请求。是在Configure方法里,通常用UseXXX的一个IApplicationBuilder 扩展方法来调用。

asp.net5有一组预定义好的中间件,比如静态文件访问,路由,诊断,认证。 你还可以自定义一个

Servers服务端。

通过Hosting并不直接监听请求,而是一个HTTP Servergo 监听,并将其转为一个HttpContext。

服务支持IIS或者self hosting 。在window上, WebListener server是基于HTTP.sys,并且脱离IIS的一个服务。

在非windows中,可以使用跨平台的 Kestrel web server

Web root

在project.json中,可以定义根目录。比如处理静态文件时的根目录。

Configuration

asp.net5支持一种简单的 键值对的配置信息。 它是内置的功能,支持多种文件类型、环境变量。

在startup.cs中,定义一个静态变量。初始化时,让它加载各种配置。然后程序其它地方直接通过

Startup.Configure就能使用信息。


应用启动

Startup类是程序的入口,这里加载配置,服务。启动时,会在程序集中在所有空间搜索叫Startup的类。你也可以指定一个类名,通过Hosting:Application 的配置的键值,启动类是不是public并无关系。  如果有多个同名的类,程序会搜索与项目根命名空间相同的优先,找不到,则根据命名空间的字母表顺序来决定。

Startup类的构造函数也支持依赖注入,比如IApplicationEnvironment的参数。

Startup类通常它必须定义一个Configure函数,以及可选的ConfigureServices函数。

Configure函数是用来指定应用如何处理HTTP请求的。通常复杂的请求管道的配置是封闭在中间件里,然后中间件再做成IApplicationBuilder的扩展方法来被Use. 函数必须有IApplicationBuilder 类型 的参数,后两个是可选的参数IHostingEnvironment and ILoggerFactory 

这些参数的对象都是通过依赖注入产生的。依赖注入是Microsoft.Extensions.DependencyInjection包实现的功能。它向外提供IServiceCollection的一个实例,挂载着所有已经添加的ServiceDescriptors。

个人认为asp.net5此处的Service命名有些问题 !IServiceCollection本是依赖注入的服务集合,它可以随时添加一个服务描述符(ServiceDescriptors),也随时可以反向生成一个实例对象来。asp.net5自身的服务Service前面描述过,代表一个功能模块或功能组件,比如mvc,静态文件服务等。

但我也不确定这两个Service到底指定的是不是同一个意思,或是故意为之。

public void ConfigureServices(IServiceCollection services){
      Console.WriteLine(services.Count); //显示13
      services.AddMvc();
     Console.WriteLine(services.Count);//显示112,表明向依赖注入的服务集合里缓存了99个服务描述
}

asp.net5的依赖注入的相关内容看了一些,但一直无法深入。因为每个文档都是在讲:如何在Startup里自动注入参数,如何在Startup里添加一个服务,然后到Controller里,构造注入。

关键的疑问点:Startup构造函数,Configure函数,Controller的构造函数注入时,为什么写个参数就能注入了,这不很奇怪吗?是通过重载实现的吗?可能需要看一下源码才可以。

ConfigureServices 函数

这个函数在Startup类里,是可选的。它可以通过注入,传入一IServiceCollection 实例作为参数.

ConfigureServices函数比Configure更早的调用,services.AddMvc();可以引入许多MVC必须的一些服务。

这样在app.UseMvc()时,这些服务才能在请求来到 时被使用。

建议在使用时,把一些服务做成IServiceCollection 的扩展,比如下面这样:

services.AddEntityFramework()
        .AddSqlServer();

这些添加进来的服务就进入到依赖注入的容器里了,随时可以在你的应用中访问到。通过依赖注入,可以在函数里注入参数,代替“硬编码”,是非常好的编程实践!

ConfigureServices函数还是你添加配置---Configuration的地方

最后一段是讲框架支持注入的服务,重点是Startup构造函数以及两个Configre的函数里的参数。它们分别有什么用,有什么属性可以获取!

 The framework services and objects include:

  • IApplicationBuilder

  • Used to build the application request pipeline. Available only to the Configuremethod in Startup. Learn more about Request Features.

  • IApplicationEnvironment

  • Provides access to the application properties, such as ApplicationName,ApplicationVersion, and ApplicationBasePath. Available to the Startup constructor andConfigure method.

  • IHostingEnvironment

  • Provides the current EnvironmentNameWebRootPath, and web root file provider. Available to the Startup constructor and Configure method. Learn more about 🔧 Hosting.

  • ILoggerFactory

  • Provides a mechanism for creating loggers. Available to the Startup constructor andConfigure method. Learn more about Logging.

  • IServiceCollection

  • The current set of services configured in the container. Available only to theConfigureServices method, and used by that method to configure the services available to an application.

下面是三个函数调用里,服务所对应的参数依次是

Startup Constructor - IApplicationEnvironment - IHostingEnvironment - ILoggerFactory

ConfigureServices - IServiceCollection

Configure - IApplicationBuilder - IApplicationEnvironment - IHostingEnvironment -ILoggerFactory






 

© 著作权归作者所有

共有 人打赏支持
noonoo
粉丝 15
博文 62
码字总数 32120
作品 0
深圳
程序员
Jexus 5.8.1 BETA1,全面支持ASP.NET5跨平台运行

作为一款运行于Linux/FreeBSD平台上以支持ASP.NET著称的高性能HTTP服务器和反向代理服务器,继5.6版完成对OWIN标准应用的支持后,就把着力点放到了对ASP.NET5的支持。 但是,由于ASP.NET5与之...

yunei
2015/12/27
1K
9
《ASP.NET5》Windows 7下Visual Studio 2015安装记录

最近想尝试一下在IBM Bluemix上使用ASP.NET5创建Web应用程序,所以需要在本地搭建ASP.NET5 Web的开发测试环境。 操作系统:Windows 7 x64 VS:Visual Studio Community 2015(含 Update 1) ...

微wx笑
2016/02/23
0
0
CS0234 The type or namespace name 'Mvc' does not exist in the namespace 'Microsoft.AspNet' (are you

CS0234 The type or namespace name 'Mvc' does not exist in the namespace 'Microsoft.AspNet' (are you missing an assembly reference?) CS0246 The type or namespace name 'Controller......

微wx笑
2016/02/27
0
0
NU1002 The dependency Microsoft.AspNet.Mvc 5.2.3 in project dotnetstarter does not support framework

NU1002 The dependency Microsoft.AspNet.Mvc 5.2.3 in project dotnetstarter does not support framework DNXCore,Version=v5.0. 解决“CS0234 The type or namespace name 'Mvc' does no......

微wx笑
2016/02/27
0
0
asp.net5发神经一例 ------无法加载依赖

代码就是示例代码,原来根据流程,配置的好好的,突然就不能用了 症状如下: dnx webError: Unable to load application or execute command 'Microsoft.AspNet.Server.Kestrel'. Available...

noonoo
2015/12/20
291
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

go语言学习总结

一、描述 go语言是直接将源码编译成二进制机器码的语言;它支持面向对象、也支持函数式编程;支持并发很容易; 二、基本语法学习路径 https://studygolang.com/subject/2...

盼望明天
15分钟前
1
0
JSP 九大内置对象及其作用域

JSP 中一共预先定义了 9 个这样的对象,分别为:request、response、session、application、out、pagecontext、config、page、exception ,下面就简单介绍下。 1、request 对象 request 对象...

几个栗子
26分钟前
0
0
Java中的坑之方括号

Java中的坑之方括号 这一段时间,在做项目的时候,发现了一个坑,这个坑说大不大,说小不小,不知道的足够喝一壶,知道的就可以轻松解决。 问题描述 在做数据统计的时候,遇见了如下形式的数...

星汉
37分钟前
1
0
[雪峰磁针石博客]python机器学习、web开发等书籍汇总

Building Machine Learning Systems with Python Third Edition - 2018.pdf 下载地址 Get more from your data by creating practical machine learning systems with Python Key Features ......

python测试开发人工智能安全
48分钟前
1
0
文件的压缩与解压(linux)

Linux下*.tar.gz文件解压缩命令 1.压缩命令:   命令格式:tar -zcvf 压缩后文件名.tar.gz 被压缩文件名 可先切换到当前目录下。压缩文件名和被压缩文件名都可加入路径。 2.解压缩命令: ...

qimh
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部