Я конвертирую проект из веб-API WCF в веб-API ASP.NET - спасибо MS :(
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(object) кажется немного грязным.
Проблема, с которой я столкнулся сейчас, заключается в том, что когда я пытаюсь запустить его, появляется много привязок, которые больше не зарегистрированы (например, IHttpContollerFactory
, ILogger
и т. д.).
Должен ли я проходить один за другим и перерегистрировать все зависимости «по умолчанию»? Кажется странным, что значения по умолчанию регистрируются в распознавателе зависимостей по умолчанию, но я не вижу быстрого способа перерегистрировать значения по умолчанию, когда установлен новый распознаватель зависимостей. Для чего-то вроде ILogger
я даже не могу получить доступ к System.Web.Http.Common.Logging.DiagnosticLogger
по умолчанию, чтобы сделать привязку.
Я что-то упускаю?