zoukankan      html  css  js  c++  java
  • ASPNET5应用程序启动

    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

  • 相关阅读:
    C# 特性学习笔记
    Nhibernate学习的第二天
    Nhibernate学习的第一天
    SQL循环添加表中的字段
    加班
    bat文件重启SQL服务和IIS服务
    判断是不是手机访问的网站
    解决Ueditor 不兼容IE7 和IE8
    实现链表的初始化,按值查找,插入,删除
    判断任一二叉树,是否为满二叉树.(输出二叉树,节点总数,二叉树深度)
  • 原文地址:https://www.cnblogs.com/superkklot/p/5049876.html
Copyright © 2011-2022 走看看