Asp.net

Autofac with MVC4:控制器沒有預設建構子

  • November 17, 2012

我一直在 MVC3 中使用 Autofac 並且喜歡它。現在我正在嘗試用 MVC4 來實現它。

我通過包管理器控制台安裝了 Autofac MVC4 和 Autofac WebApi 的預發布版本(Install-Package Autofac.Mvc4 -Pre 和 Install-Package Autofac.WebApi -Pre)

我調整了我的 IoC 容器如下:

   private static void SetAutofacContainer()
   {
       var builder = new ContainerBuilder();

       builder.RegisterControllers(Assembly.GetExecutingAssembly());
       builder.RegisterApiControllers(Assembly.GetExecutingAssembly());

       builder.RegisterType<UnitOfWork>().As<IUnitOfWork>().InstancePerHttpRequest().InstancePerApiRequest();
       builder.RegisterType<DatabaseFactory>().As<IDatabaseFactory>().InstancePerHttpRequest().InstancePerApiRequest();
       builder.RegisterType<RepositoryWrapper>().As<RepositoryWrapper>().InstancePerHttpRequest().InstancePerApiRequest();
       builder.RegisterType<ServiceWrapper>().As<ServiceWrapper>().InstancePerHttpRequest().InstancePerApiRequest();

       // Repositories
       builder.RegisterAssemblyTypes(typeof(UserRepository).Assembly).Where(t => t.Name.EndsWith("Repository")).AsImplementedInterfaces().InstancePerHttpRequest().InstancePerApiRequest();

       // Services
       builder.RegisterAssemblyTypes(typeof(UserService).Assembly).Where(t => t.Name.EndsWith("Service")).AsImplementedInterfaces().InstancePerHttpRequest().InstancePerApiRequest();

       IContainer container = builder.Build();
       DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
       GlobalConfiguration.Configuration.DependencyResolver = new AutofacWebApiDependencyResolver(container);

   }

當我執行應用程序(通過訪問 API 控制器)時,出現異常:“ Controllers.UserController’ 沒有預設建構子

控制器如下所示:

namespace Controllers
{
[Authorize]
public class UserController : ApiController
{
   private ServiceWrapper _services;

   public UserController(ServiceWrapper services)
   {
       _services = services;
   }

   // GET api/user/{userrequest}
   public IQueryable<User> Get(UserRequest request)
   {
       if (ModelState.IsValid)
       {
         '...
       }  
   } 
}

我錯過了什麼嗎?我沒有設置正確嗎?任何幫助將不勝感激!

更新

我的 API 控制器位於同一解決方案中的單獨項目中。如果我將 API 控制器放在我的主 MVC 項目中,它就可以工作。有人可以告訴我如何讓 Autofac 在我的 API 項目中註冊 API 控制器嗎?

使用RegisterApiControllers您告訴 Autofac 它應該在哪裡(在哪個程序集中)尋找您的方法的方法ApiControllers

所以下面的呼叫:

builder.RegisterApiControllers(Assembly.GetExecutingAssembly());

ApiControllers從目前程序集(項目)註冊。

如果您ApiController在不同的項目中也有 s,則需要像這樣使用它:

builder.RegisterApiControllers(typeof(UserController).Assembly);

這意味著:註冊所有形式的ApiController程序集(項目)UserControllerRegisterApiControllers因此,即使您ApiController在程序集(項目)中有多個,每個程序集也只需要一個。

引用自:https://stackoverflow.com/questions/13423992