根据本文使用Owin将我的Windows服务应用程序设置为自托管:
http://www.asp.net/web-api/overview/hosting-aspnet-web-api/use-owin-to-self-host-web-api
我使用了WebApp.Start方法的重载:
这是我的代码:
//(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方法的type参数的要求究竟是什么?它似乎没有任何限制,我也无法找到有关此参数的选项/要求的任何文档。它是否寻找将IAppBuilder作为参数的方法?如果我将Configuration()方法的名称更改为其他内容怎么办?如果我将方法设为内部怎么办?我可以使用此类配置其他选项吗?
所有这些记录在哪里?我觉得没有上面链接的文章,我从来没有能够弄清楚要实施什么。
答案 0 :(得分:6)
WebApp
类使用反射来获取指向Configuration(IAppBuilder)
方法的指针,然后调用它。如果作为泛型类型参数提供的类没有带有预期参数的Configuration
方法,那么在运行时会出现错误。
我同意这不像我们想象的那样可以发现,我不确定为什么原始开发人员以这种方式实现它而不是添加where T: IStartup
约束。如果没有文档,这不仅会使它更容易被发现,而且还允许编译器在编译时检查它。
这种方法的唯一优势是OWIN开发人员可以在不破坏现有代码的情况下,在将来添加更多具有不同签名的方法或方法。