我试图让Autofac与WebApi一起工作。我有我的ApiControllers在一个单独的项目从主要的Web项目。ASP.NET WebApi + Autofac没有找到ApiControllers
InventorySystem.Web.UI InventorySystem.Web.Api.Controllers
每当我试图浏览到一个API的路线我得到的回应:
<Exception xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<ExceptionType>System.ArgumentNullException</ExceptionType>
<Message>Value cannot be null. Parameter name: value</Message>
<StackTrace>
at System.Web.Http.Controllers.HttpControllerContext.set_Controller(IHttpController value)
at System.Web.Http.Dispatcher.DefaultHttpControllerFactory.CreateInstance(HttpControllerContext controllerContext, HttpControllerDescriptor controllerDescriptor)
at System.Web.Http.Dispatcher.DefaultHttpControllerFactory.CreateController(HttpControllerContext controllerContext, String controllerName)
at Autofac.Integration.WebApi.AutofacControllerFactory.CreateController(HttpControllerContext controllerContext, String controllerName)
at System.Web.Http.Dispatcher.HttpControllerDispatcher.SendAsyncInternal(HttpRequestMessage request, CancellationToken cancellationToken)
at System.Web.Http.Dispatcher.HttpControllerDispatcher.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
</StackTrace>
</Exception>
当我通过Autofac代码我一步看到我的控制器已被注册,但AutofacControllerActivator.Create()返回null。特别是行 返回(ResolutionExtensions.ResolveOptional(scope,controllerType)作为IHttpController);
自动代码: string binDirectory = Path.Combine(HttpRuntime.AppDomainAppPath,“bin”);
var builder = new ContainerBuilder();
builder.ConfigureWebApi(GlobalConfiguration.Configuration);
builder.RegisterControllers(Assembly.GetExecutingAssembly()).PropertiesAutowired();
builder.RegisterApiControllers(Assembly.LoadFile(Path.Combine(binDirectory, "InventorySystem.Web.Api.dll"))).PropertiesAutowired();
builder.RegisterFilterProvider();
var container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
GlobalConfiguration.Configuration.ServiceResolver.SetResolver(new AutofacWebApiDependencyResolver(container));
我错过了什么吗?
感谢
您提供给RegisterAPIControllers的组装位置是否正确?当我的程序集名称出错时,我得到了同样的错误。 – Gavin 2012-04-29 13:27:46
@Gavin是的,因为我的apicontroller确实被注册。这只是似乎失败的解决办法。 – user695595 2012-04-29 14:45:32