ASP.Net MVC 4的Web API控制器不到风度工作,Unity.WebApi [英] ASP.Net MVC 4 Web API controller dosn't work with Unity.WebApi
问题描述
我的ASP.Net MVC 4的Web API控制器用不到风度工作Unity.WebApi。在同一个项目中简单的控制器,Unity.Mvc3正常工作。但是,当我运行的Web API控制器从ApiController我得到一个消息来源:
My ASP.Net MVC 4 Web API controller dosn't work with Unity.WebApi. In the same project simple controllers works with Unity.Mvc3 properly. But when I run Web API controller derived from ApiController I'm getting a message:
{的$ id:1,消息:发生错误,ExceptionMessage:类型
'ElectricTests.Controllers.Api.DocumentsController'没有一个
默认
构造函数,ExceptionType:System.ArgumentException,堆栈跟踪:
在System.Linq.Ex pressions.Ex pression.New(type类型)\\ r \\ n在
System.Web.Http.Internal.TypeActivator.Create [TBASE](类型
instanceType)\\ r \\ n在
System.Web.Http.Dispatcher.DefaultHttpControllerActivator.GetInstanceOrActivator(HTT prequestMessage
要求,类型controllerType,Func`1&安培;激活剂)\\ r \\ n在
System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create(HTT prequestMessage
要求,HttpControllerDescriptor controllerDescriptor,类型
controllerType)}
{"$id":"1","Message":"An error has occurred.","ExceptionMessage":"Type 'ElectricTests.Controllers.Api.DocumentsController' does not have a default constructor","ExceptionType":"System.ArgumentException","StackTrace":" at System.Linq.Expressions.Expression.New(Type type)\r\n at System.Web.Http.Internal.TypeActivator.Create[TBase](Type instanceType)\r\n at System.Web.Http.Dispatcher.DefaultHttpControllerActivator.GetInstanceOrActivator(HttpRequestMessage request, Type controllerType, Func`1& activator)\r\n at System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create(HttpRequestMessage request, HttpControllerDescriptor controllerDescriptor, Type controllerType)"}
我ApiController:
My ApiController:
public class DocumentsController : ApiController
{
private readonly IDocumentsRepository _repository;
public DocumentsController(IDocumentsRepository repository) {
_repository = repository;
}
public IEnumerable<FormattedDocument> GetFormattedDocuments()
{
return _repository.GetAllFormattedDocuments();
}
...
Bootstrapper.cs:
Bootstrapper.cs:
public static class Bootstrapper {
public static void Initialise() {
IUnityContainer container = BuildUnityContainer();
DependencyResolver.SetResolver(new UnityDependencyResolver(container));
}
private static IUnityContainer BuildUnityContainer() {
var container = new UnityContainer();
// register all your components with the container here
// it is NOT necessary to register your controllers
// e.g. container.RegisterType<ITestService, TestService>();
container.RegisterType<IDocumentsRepository, DocumentsRepository>();
container.RegisterType<IQuestionsRepository, QuestionsRepository>();
container.RegisterType<ITestRepository, TestsRepository>();
return container;
}
}
哪里是我的错?
推荐答案
控制器和ApiController的处理是不同的,因为它们有完全不同的基类:
The handling of Controller and ApiController is different as they have completely different base classes:
我用Unity.MVC4库控制器DI( http://www.nuget.org/packages/Unity。 MVC4 / )
I use Unity.MVC4 library for controller DI (http://www.nuget.org/packages/Unity.MVC4/)
Install-Package Unity.MVC4
和Unity.WebAPI的DI(<一个href=\"http://www.nuget.org/packages/Unity.WebAPI/\">http://www.nuget.org/packages/Unity.WebAPI/)
and Unity.WebAPI for DI (http://www.nuget.org/packages/Unity.WebAPI/)
Install-Package Unity.WebAPI
您引导程序应该是两者的结合:
Your bootstrapper should be a combination of both:
DependencyResolver.SetResolver(new Unity.Mvc4.UnityDependencyResolver(container));
GlobalConfiguration.Configuration.DependencyResolver = new Unity.WebApi.UnityDependencyResolver(container);
请注意我也不得不做添加一些注册,以获得帮助页面正常工作
Note I also had to do to add some registration to get the Help page to work
container.RegisterInstance(typeof (HttpConfiguration), GlobalConfiguration.Configuration);
由于Unity.MVC4的所有者我期待在获得我们的图书馆内实施的WebAPI。
As the owner of Unity.MVC4 I am looking at getting WebApi implemented within our library.
这篇关于ASP.Net MVC 4的Web API控制器不到风度工作,Unity.WebApi的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!