带有structureMap的WebAPI + APIController

ano*_*Neo 21 .net structuremap asp.net-web-api

我试图使用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);
    }
}
Run Code Online (Sandbox Code Playgroud)

基本上ConcretizationsManager是StructureMap的包装器.这个方法对于Controller类型的控制器总是运行正常,但是对于APIController不行.

有人让我走向正确的方向吗?很感谢

Rad*_*ler 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

Factory是我的Sturcturemap API的包装器

App_Start\WebApiConfig.cs我注册这样:

config.Services.Replace(typeof(IHttpControllerActivator), new ServiceActivator(config));
Run Code Online (Sandbox Code Playgroud)

  • 在我自己的应用程序中,它是`ObjectFactory.GetInstance`而不是`Factory.CreateInstance` (5认同)