我试图使用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不行。
有谁让我走向正确的方向? 非常感谢
答案 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。我还没有证实自己。