zoukankan      html  css  js  c++  java
  • .net core Web应用启动类

    在ASP.NET Core中,Startup类为Web应用的入口类,用于配置Web服务的管道/过滤器以及Web应用所能用到的服务。在启动Web应用后,ASP.NET将在主库中查询名为Startup的类,无论查找到的Startup类的访问限制是什么,ASP.NET Core将直接加载该类并执行后续的操作。ASP.NET的查询方式为首先查找主库中的根命名空间,根命名空间中不包含Startup类,则根据字典序查找剩余的命名空间,并加载第一个找到的Startup类。(这一段存疑)

    Startup类参照依赖注入(Dependency Injection)设计模式实现。在Startup类中所依赖的对象,可以通过Startup类的构造方法注入到类内。依照规定,Startup类中必须包含Configure方法,可以定义ConfigureServices方法。

    0x00 Startup类中依赖的对象所在容器在哪儿?

    首先,要说明OWIN所定义的层次模型。

    1. Host层,用于配置程序以及启动进程。
    2. Server层,用于提供HTTP Server,配置Middleware以及相应服务。
    3. Middleware层
    4. Application层

    这里我们不关注Middleware以及Application层所要负责哪些东西,仅关注Host和Server层。 我们可以发现,Host层中所实现的内容,在Program.Main方法中实现,同时这个方法也是真正程序的入口。而Server层就是我们现在所论及的Startup类中的东西了,那很容易就能明白,注入到Startup类中的对象,原来所处的容器应该是在Host层中。我们进一步去观察Program.cs文件中的内容

    public static void Main(string[] args)  
    {  
        var host = new WebHostBuilder()  
            .UseKestrel()  
            .UseContentRoot(Directory.GetCurrentDirectory())  
            .UseIISIntegration()  
            .UseStartup<Startup>()  
            .Build();  
        host.Run()  
    }
    

    代码中不能发现其容器所在,而在IWebBuilder接口中(即host的类型)是如下定义的

    public interface IWebHost : IDisposable  
    {  
        IFeatureCollection ServerFeatures { get; }  
        IServiceProvider Services { get; }  
        void Start();  
    }
    

    很显然地,Services便是我们要找的依赖对象容器。

    0x01 Configure方法

    该方法便是用于安排布置在管道中过滤器的顺序的方法。配置过滤器必须要使用IApplicationBuilder的实例,该实例同样是通过依赖注入的方法进入到Configure方法中使用的。因此Configure方法必须携带一个IApplicationBuilder参数。因为是依赖注入,如果有需要,还可以再添加。

    在本方法中,以Use开头的方法均是在管道中添加一个过滤器。

    0x02 ConfigureServices方法

    Startup方法中,可以有选择的添加该方法,该方法用于配置应用所能使用的服务,这里同样是使用了依赖注入的设计模式,ConfigureServices中的内容就是在装填应用所依赖的服务容器。

  • 相关阅读:
    Java 线程池
    eclipse 创建Java web项目 Cannot change version of project facet Dynamic web module to xxx
    Maven maven-compiler-plugin 编译问题
    设计模式 单例模式
    Spring 配置文件注入
    Java HashMap、HashTable与ConCurrentHashMap
    Java Web ActiveMQ与WebService的异同
    Java Web 拦截器和过滤器的区别
    html2canvas 使用指南
    js动态改变setInterval的时间间隔
  • 原文地址:https://www.cnblogs.com/gscienty/p/5950479.html
Copyright © 2011-2022 走看看