我一直在使用MVC3中的Autofac並喜歡它。現在我試圖用MVC4來實現它。Autofac與MVC4:控制器沒有默認的構造函數
我通過軟件包管理器控制檯(安裝,包裝Autofac.Mvc4 - 售前和安裝,包Autofac.WebApi - 預)
我調整好自己的IoC容器安裝Autofac MVC4和Autofac的WebAPI的預發佈版本如下:
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控制器嗎?
你能顯示你的usercontroller類嗎? –
從哪裏調用'SetAutofacContainer'方法? – nemesv
在Global.asax的Application_Start()中 – Vocte