WebApp.Start 方法类型参数

在基于本文使用Owin将我的Windows服务应用程序设置为自托管主机:

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

我使用了WebApp.Start方法的这个重载:

WebApp.Start方法(String)

这是我的代码:

//(in startup method) _server = WebApp.Start(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类使用reflection来获取指向Configuration(IAppBuilder)方法的指针,然后调用它。 如果作为generics类型参数提供的类没有带有预期参数的Configuration方法,那么在运行时会出现错误。

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

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