1. 启动类

在asp.net5当中,Startup类提供应用程序的入口,对所有应用程序是必须的。争对特定环境的配置的starup class和方法也是有可能的, 但是,不管怎样, 一个Startup类作为整个应用程序的入口。ASP.NET在主要的程序集当中寻找Startup的类名, 你可以用 Hosting:Application 配置键申明一个不同的程序集去掉Starup类,不管这个类是定义成公共的还是其它的, ASP.NET将加载它只要它符号命名规范。如果有多个Startup类,不会引发异常, ASP.NET会选择一个它命名空间的(符号当前工程根命名空间的优先,否则按字母表的排序的命名空间来用)。

Starup类可选地在构造函数当中通过DI接受依赖. 通常,应用程序的配置是有Startup构造函数当中定义的。另外Startup类当中也会定义Configure方法,也可以可选地定义ConfigureServices方法,他们会被调用在应用程序启动的时候。

2. 配置方法

Configure方法用来指明ASP.NET应用程序怎么回复一个单独的请求。最简单的,你可以配置每个请求返回同一个回复。然而,真实的应用程序要复杂得多,很多复杂的管道可以封装在middleware里面,可以用IApplicationBuilder的扩展方法添加。

你的Configure方法必须接受一个IApplicationBuilder的参数。另外还有IHostingEnvironment和ILoggerFactory。这些服务会随着程序的启动而被注入,下面是一个默认的站点的模板,你可以看到几个扩展的方法被用来支持BrowserLink, error pages, static files, ASP.NET MVC和Identity.

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)

{

loggerFactory.AddConsole(Configuration.GetSection("Logging"));

logggerFactory.AddDebug();

if(env.IsDevelopment())

{

app.UserBrowserLink();

app.UseDeveloperExceptionPage();

app.UseDatabaseErrorPage();

}

else

{

app.UseExceptionHandler("/Home/Error");

}

app.UseIISPlatformHandler(options => options.AuthenticationDescriptions.Clear());

app.UseStaticFiles();

app.UseIdentity();

app.UseMvc(routes => { routes.MapRout( name="default", template: "{controller=Home}/{action=Index}/{id?}"); });

}

the UseMvc扩展方法被定义在BuilderExtensions里面, 它的首要职责是确保MVC被做为一个服务添加进来,并且设置了路由。

你可以用IApplicationBuilder去定义你自己的中间件。

3. ConfigureServices方法

你的Startup类可选地包含一个ConfigureServices方法,用来配置你的应用程序需要的服务。它带一个IServiceCollection参数,返回一个IServiceProvider, ConfigureServices在Configure之前调用。这很重要,因为一些功能比如MVC,要使它工作正常,需要特定的服务的添加在ConfigureService当中。

和Configure一样,服务的添加也是由IServiceCollection的扩展函数来添加的。例如下面的例子:

public void ConfigureServices(IServiceCollection services)

{

  services.AddEntityFramework().AddSqlServer().AddDbContext<ApplicationDbContext>(options =>

    options.UseSqlServer(Configuration["Data:DefaultConnection:ConnectionString"]));

  services.AddIdentity<ApplicationUser, IdentityRole>().AddEntityFrameworkStores<ApplicationDbContext>().AddDefaultTokenProviders();

  services.AddMvc();

  services.AddTransient<IEmailSender, AuthMessageSender>();

  services.AddTransient<ISmsSender, AuthMessageSender>();

}

增加的服务通过DI在应用的时候注入,像Startup一样,它里面方法的参数的具体实现也都是由容器注入的,同样的你的中间件,MVC控制器和其它的类也一样会注入。

配置类也在ConfigureServices方法当中添加,如:AppSettings.

4. 在Startup里面已知的服务

你可以在Startup构造函数或者Configure或者ConfigureServices方法当用应用接口来注册你自己的服务。下面是默认用到的一些接口:

IApplicationBuilder

这个用来创建应用程序的请求的管道,在Startup类的Configure方法当中用到

IApplicationEnvironment

提供用于访问应用程序的属性,如ApplicationName, ApplicationVersion, 和ApplicationBasePath, 在Startup的构造函数和Configure函数里都可用到。

IHostingEnvironment

提供如当前的EnvironmentName, WebRootPath, 和 web root file provider.

ILoggerFactory

提供创建日志的机制, 在Startup构造和Configure里用到。

IServiceCollection

当前窗口配置的服务的集合,在Startup的ConfigureServices方法当中用到。

下面是应用这些接口的顺序:

Startup构造函数:IApplicationEnvironment,  IHostingEnvironment,  ILoggerFactory

ConfigureServices : IServiceCollection

Configure: IApplicationBuilder, IApplicationEnvironment, IHostingEnvironment - ILoggerFactory

ASPNET5应用程序启动的更多相关文章

  1. ASP.NET Core 中文文档 第三章 原理(1)应用程序启动

    原文:Application Startup 作者:Steve Smith 翻译:刘怡(AlexLEWIS) 校对:谢炀(kiler398).许登洋(Seay) ASP.NET Core 为你的应用程 ...

  2. 应用程序启动管理 Winform版

    ★前言      开发这个小工具的想法主要是机器中安装了数据库,每次设置开机启动数据库服务的话,则系统启动很慢,每次都得手动到服务管理器中停止服务,很是繁琐,相信不少做开发的朋友会遇到同样的问题,就有 ...

  3. IOS程序启动原理

    1.Info.plist 建立一个工程后,会在Supporting files文件夹下看到一个“工程名-Info.plist”的文件,该文件对工程做一些运行期的配置,非常重要,不能删除 常见属性(红色 ...

  4. iOS程序启动过程

    First, the function creates the main application object (step 3 in the flowchart). If you specify ni ...

  5. 详解 IOS 7.1 程序启动原理

    程序都是从Main方法入口的 IOS 也不例外 int main(int argc,char * argv[]) { @autoreleasepool { return UIApplicationMa ...

  6. VC++ 实现VC程序启动时最小化到任务栏(完美解决闪烁问题)

    之前写的一个VC应用程序,是程序启动时就直接出现在任务栏, 窗体不出现,等用户点击任务栏图标再出现窗口.和一些防火墙什么的软件类似. 这种效果实现并不是很困难的,硬是找不到最好的.为什么呢? 首先,在 ...

  7. iOS app 程序启动原理

    iOS app 程序启动原理 Info.plist: 常见设置     建立一个工程后,会在Supporting files文件夹下看到一个"工程名-Info.plist"的文件, ...

  8. iOS开发——UI进阶篇(七)程序启动原理、打电话、发短信

    一.Info.plist常见的设置 1.建立一个工程后,会在Supporting files文件夹下看到一个“工程名-Info.plist”的文件,该文件对工程做一些运行期的配置,非常重要,不能删除 ...

  9. 游戏服java程序启动,显示内存溢出

    1.OutOfMemoryError:Java heap space 过程:服务器上面的mysql突然异常重启,导致了程序启动的时候报错 问题1:OutOfMemoryError:Java heap ...

随机推荐

  1. Ubuntu系统使用技巧

    ======================vbox 显示模式=====================right_ctrl+c     自动缩放right_ctrl_home  显示菜单====== ...

  2. 『安全科普』WEB安全之渗透测试流程

    熟悉渗透流程,攻击会像摆积木一样简单! 0x 01:信息收集 收集网站信息对渗透测试非常重要,收集到的信息往往会让你在渗透中获得意外惊喜. 1. 网站结构 可以使用扫描工具扫描目录,主要扫出网站管理员 ...

  3. 转:mysql性能优化的19个要点

    原文来自于:http://outofmemory.cn/mysql/mysql-performance-tips 1.为查询优化你的查询 大多数的MySQL服务器都开启了查询缓存.这是提高性最有效的方 ...

  4. Play on Words

    poj1386:http://poj.org/problem?id=1386 题意:给你n个单词,问你是否能够通过调整单词的顺序存在这样的一个序列,使得 每个单词的首字母是前一个单词的尾字母. 题解: ...

  5. 全是干货---Linux 高可用(HA)集群基本概念详解

    http://www.linuxidc.com/Linux/2013-08/88522.htm 高可用集群的衡量标准    HA(High Available), 高可用性群集是通过系统的可靠性(re ...

  6. HDU 4717The Moving Points warmup2 1002题(三分)

    The Moving Points Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

  7. github继续折腾

    又在折腾github了,本来以前在neworiginou这个github上上传过项目的: 现在想在另一个github上joely上传项目,发现按以前的流程做个测试,居然没能上传成功! 经发现,以前的n ...

  8. 搜索与DP:SLIKAR

    Problem: SLIKAR[题目描述]Josip 是个奇怪的画家,他想画一幅由 N*N 个点组成的图, N 是一个 2 的乘方 数(1, 2, 4, 8, 16 等.).每个点要么是黑色的,要么是 ...

  9. linux内网机器访问外网代理设置squid

    公司一般出于安全考虑, 在同一局域网中只有一台机器可以访问外网,运维进行了整体的限制, 但是在后面的工作中,需要在机器上安装一些软件,及命令,所以其他的机器需要访问外网来简化工作, 但又不能打乱原有运 ...

  10. docs

    https://www.eucalyptus.com/docs/eucalyptus/3.4/index.html  [Eucalyptus PDF官方下载] http://aws.amazon.co ...