WebApp.Start< TStartup>方法类型参数

本文关键字:方法 类型参数 TStartup Start WebApp | 更新日期: 2023-09-27 18:14:41

根据这篇文章,使用Owin设置我的Windows Service应用程序为self host:

http://www.asp.net/web-api/overview/hosting-aspnet-web-api/use-owin-to-self-host-web-api

我使用了WebApp的这个重载。启动方法:

WebApp。Start Method (String)

下面是我的代码:
//(in startup method) 
_server = WebApp.Start<Startup>(BaseAddress);
public class Startup
{
    // This code configures Web API. The Startup class is specified as a type
    // parameter in the WebApp.Start method.
    public void Configuration(IAppBuilder appBuilder)
    {
        // Configure Web API for self-host. 
        var config = new HttpConfiguration();
        config.Routes.MapHttpRoute("DefaultApi", "api/{controller}/{id}", new
        {
            id = RouteParameter.Optional
        });
        appBuilder.UseWebApi(config);
    }
} 

它工作得很好,所以没有抱怨。

但是Start方法的类型参数到底有什么要求呢?它似乎没有任何约束,我还没能找到关于我的选项/需求在这个参数上的任何文档。它是否寻找以IAppBuilder作为参数的方法?如果我将Configuration()方法的名称更改为其他名称会怎样?如果我把方法设为内部呢?我可以配置这个类的其他选项吗?

所有这些都记录在哪里?我觉得如果没有上面链接的文章,我永远都不可能弄清楚要实现什么。

WebApp.Start< TStartup>方法类型参数

WebApp类使用反射来获得指向Configuration(IAppBuilder)方法的指针,然后调用它。如果你提供的类作为泛型类型参数没有Configuration方法,那么你会在运行时得到一个错误。

我同意这不是我们想要的那样可发现的,我不确定为什么原始开发人员以这种方式实现它,而不是添加where T: IStartup约束。这不仅使它在没有文档的情况下更容易被发现,而且还允许编译器在编译时检查它。

这种方法的唯一优点是,OWIN开发人员可以在将来添加更多的方法或使用不同签名的方法,而不会破坏现有的代码。