【发布时间】:2013-04-14 08:18:30
【问题描述】:
我的 ASP.Net MVC 4 Web API 控制器不适用于 Unity.WebApi。在同一个项目中,简单的控制器可以正常使用 Unity.Mvc3。但是当我运行从 ApiController 派生的 Web API 控制器时,我收到一条消息:
{"$id":"1","Message":"发生错误。","ExceptionMessage":"类型 'ElectricTests.Controllers.Api.DocumentsController' 没有 默认 构造函数","ExceptionType":"System.ArgumentException","StackTrace":" 在 System.Linq.Expressions.Expression.New(类型类型)\r\n 在 System.Web.Http.Internal.TypeActivator.Create[TBase](类型 instanceType)\r\n 在 System.Web.Http.Dispatcher.DefaultHttpControllerActivator.GetInstanceOrActivator(HttpRequestMessage 请求,类型 controllerType,Func`1& 激活器)\r\n at System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create(HttpRequestMessage 请求,HttpControllerDescriptor 控制器描述符,类型 控制器类型)"}
我的 ApiController:
public class DocumentsController : ApiController
{
private readonly IDocumentsRepository _repository;
public DocumentsController(IDocumentsRepository repository) {
_repository = repository;
}
public IEnumerable<FormattedDocument> GetFormattedDocuments()
{
return _repository.GetAllFormattedDocuments();
}
...
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;
}
}
我的错误在哪里?
【问题讨论】:
-
异常文本:DocumentsController 没有默认构造函数
-
这篇文章解决了这个问题:asp.net/web-api/overview/extensibility/…
标签: c# asp.net json api unity-container