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
类使用反射来获得指向Configuration(IAppBuilder)
方法的指针,然后调用它。如果你提供的类作为泛型类型参数没有Configuration
方法,那么你会在运行时得到一个错误。
我同意这不是我们想要的那样可发现的,我不确定为什么原始开发人员以这种方式实现它,而不是添加where T: IStartup
约束。这不仅使它在没有文档的情况下更容易被发现,而且还允许编译器在编译时检查它。
这种方法的唯一优点是,OWIN开发人员可以在将来添加更多的方法或使用不同签名的方法,而不会破坏现有的代码。