Подтвердить что ты не робот

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.

Кто-нибудь, чтобы привести меня в правильное направление? Очень спасибо

4b9b3361

Ответ 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));