use*_*595 5 asp.net-mvc autofac asp.net-mvc-4 asp.net-web-api
我正在努力让Autofac与WebApi一起工作.我将ApiControllers放在与主Web项目不同的项目中.
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>
Run Code Online (Sandbox Code Playgroud)
当我单步执行Autofac代码时,我看到我的控制器已经注册,但AutofacControllerActivator.Create()返回null.具体是行返回(ResolutionExtensions.ResolveOptional(scope,controllerType)为IHttpController);
autofac代码: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));
Run Code Online (Sandbox Code Playgroud)
我错过了什么吗?
谢谢
您是否忘记使用构建容器注册 Api 控制器的构造函数依赖项?
HostingEnvironment.MapPath("~/bin") 是获取 bin 目录中文件路径的另一种好方法。
| 归档时间: |
|
| 查看次数: |
6698 次 |
| 最近记录: |