我一直在 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)
{
'...
}
}
}
我错过了什么吗?是不是我没设置好?任何帮助将不胜感激!
Update
我的 API 控制器位于同一解决方案的单独项目中。如果我将 API 控制器放在我的主 MVC 项目中,它就可以工作。有人可以告诉我如何让 Autofac 在我的 API 项目中注册 API 控制器吗?
随着RegisterApiControllers
你告诉Autofac它应该在哪里(在哪个程序集中)寻找你的方法ApiControllers
所以下面的调用:
builder.RegisterApiControllers(Assembly.GetExecutingAssembly());
注册ApiControllers
来自当前程序集(项目)。
如果你有ApiController
也在不同的项目中,您需要像这样使用它:
builder.RegisterApiControllers(typeof(UserController).Assembly);
这意味着:注册all the ApiController
形成程序集(项目),其中UserController
生活。所以你只需要一个RegisterApiControllers
每个程序集,即使您有多个ApiController
在程序集(项目)中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)