WebAPI + APIController со структуройMap
Я пытаюсь использовать StructureMap для инициализации моего ValuesController, производного от ApiController, но я получаю исключение, которое говорит:
IControllerFactory "... CustomControllerFactory" не вернул контроллер для имени "api".
Вот код.
public class CustomControllerFactory : DefaultControllerFactory
{
protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType)
{
if (controllerType == null)
return null;
return (Controller)ConcretizationsManager.GetInstance(controllerType);
}
}
в основном ConcretizationsManager - это оболочка StructureMap..
Этот метод всегда работает нормально для контроллеров типа Controller, но для APIController Dont.
Кто-нибудь, чтобы привести меня в правильное направление?
Очень спасибо
Ответы
Ответ 1
Для веб-API я использую Custom ServiceActivator, как это (т.е. другой factory, а затем для MVC):
public class ServiceActivator : IHttpControllerActivator
{
public ServiceActivator(HttpConfiguration configuration) {}
public IHttpController Create(HttpRequestMessage request
, HttpControllerDescriptor controllerDescriptor, Type controllerType)
{
var controller = Factory.CreateInstance(controllerType) as IHttpController;
return controller;
}
}
Где factory - моя оболочка API Sturcturemap
И в App_Start\WebApiConfig.cs
я регистрирую это следующим образом:
config.Services.Replace(typeof(IHttpControllerActivator), new ServiceActivator(config));
Ответ 2
Для этого есть поддержка сторонних разработчиков с StructureMap 3
nuget install Structuremap.WebApi2
StructureMap 4 был выпущен и может быть использован также, однако могут быть небольшие улучшения, необходимые. Я не подтвердил себя.