带有structureMap的WebAPI + APIController

时间:2013-09-19 13:59:39

标签: .net asp.net-web-api structuremap

我试图使用StructureMap来初始化我从ApiController派生的ValuesController,但是我得到一个例外:

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的包装器。 对于控制器类型的控制器,此方法总是运行正常,但对于APIController不行。

有谁让我走向正确的方向? 非常感谢

2 个答案:

答案 0 :(得分:38)

对于Web API,我使用的是Custom ServiceActivator (即不同的工厂,然后是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是Sturcturemap API的包装器

App_Start\WebApiConfig.cs我注册的是这样:

config.Services.Replace(typeof(IHttpControllerActivator), new ServiceActivator(config));

答案 1 :(得分:2)

第一方支持StructureMap 3

  

nuget install Structuremap.WebApi2

StructureMap 4已经发布,也可以使用there may be slight tweaks needed。我还没有证实自己。