asp.net – 使用MVC4的Autofac:控制器没有默认构造函数
我一直在使用MVC3中的Autofac,并喜欢它.现在我试图用MVC4实现它.
我通过软件包管理器控制台(Install-Package Autofac.Mvc4 -Pre和Install-Package Autofac.WebApi -Pre)安装了Autofac MVC4和Autofac WebApi的预发行版本. 我调整了我的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控制器)我得到例外: 控制器如下所示: 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控制器? 解决方法
使用RegisterApiController方法,您可以告诉Autofac哪个(在哪个程序集中)它应该查找您的ApiControllers
所以下面来电: builder.RegisterApiControllers(Assembly.GetExecutingAssembly()); 从当前程序集(project)注册ApiController. 如果您在另一个项目中也有ApiControllers,则需要使用它: builder.RegisterApiControllers(typeof(UserController).Assembly); 这意味着:将所有ApiController注册到UserController所在的程序集(project)中.因此,即使您在程序集(项目)中有多个ApiController,每个程序集只需要一个RegisterApiControllers. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net – 在Windows 2008 R2 SP1上,asmx的JQuery失败
- 编译ASP.NET网站时出现MSBuild错误
- asp.net 删除项目文件/文件夹IIS重启,Session丢失问题
- C#_Excel数据读取与写入_自定义解析封装类_支持设置标题行位
- ASP.NET Core 2.0 带初始参数的中间件问题及解决方法
- ASP.NET MVC应用程序处理程序映射和模块的性能和安全性
- asp.net – 如何调用我的WCF服务构造函数?
- Asp.Net MVC EnableClientValidation不起作用
- asp.net – Linux或OS X中的Web API 2.1
- 如何让asp.net不自动转换URL中的转义斜杠?