我從WCF的Web API轉換項目的ASP.NET Web API - 感謝MS :(的ASP.NET Web API(自主機)+ Ninject - 默認綁定
自託管POC代碼:
。static void Main(string[] args)
{
var kernel = new StandardKernel();
const string baseAddress = "http://localhost:8080";
var config = new HttpSelfHostConfiguration(baseAddress);
config.ServiceResolver.SetResolver(new NinjectServiceLocator(kernel));
config.Routes.MapHttpRoute("DefaultApi", "api/{controller}/{id}", new {id = RouteParameter.Optional});
var server = new HttpSelfHostServer(config);
server.OpenAsync().Wait();
Console.WriteLine("The server is running....");
Console.ReadLine();
}
我註冊Ninject的依賴解析器要做到這一點,我現在用的是CommonServiceLocator.NinjectAdapter
進行註冊:
config.ServiceResolver.SetResolver(new NinjectServiceLocator(kernel));
這似乎就工作,我可以告訴雖然感覺有點使用SetResolver(對象)髒。
我現在的問題是當我嘗試運行它時,有很多不再註冊的綁定(即IHttpContollerFactory
,等)。
我是否必須一個接一個地重新註冊所有「默認」依賴項?使用默認的依賴關係解析器註冊默認值似乎很奇怪,但是當設置新的依賴關係解析器時,我看不到快速重新註冊默認值的方法。對於像這樣的東西,我似乎無法訪問默認的System.Web.Http.Common.Logging.DiagnosticLogger
來進行綁定。
我錯過了什麼嗎?
也許那時的問題是,NinjectServiceLocator拋出一個異常時,映射未找到。我會進一步調查。 – 2012-03-29 03:43:58
@Discofunk是的,它的確如此。但是框架會吞噬你的例外。 – 2012-03-29 13:03:03
我明白了。當在調試中運行時VS2010在異常中斷了,但似乎被吞下了。 – 2012-03-29 15:34:09