我从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