我面临着一个奇怪的问题,在过去的两天里一直让我感到困惑。由于我研究并尝试了不同的解决方案,但尚未解决。Autofac 用作 DI 容器。该解决方案包含多个项目,包括 ASP.NET MVC 5 和 Web API。我们无法在 API 项目中配置和注册 Autofac,而它在 Web 项目上正常工作。我尝试了几种解决方案,但没有一个有效。我面临着“ 尝试创建'OperationController'类型的控制器时发生错误。确保控制器具有无参数公共构造函数”的错误。下面提供了代码启动.cspublic void Configuration(IAppBuilder app) { var httpConfig = new HttpConfiguration(); ConfigureOAuth(app); WebApiConfig.Register(httpConfig); app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll); RegisterMappers(); var builder = new ContainerBuilder(); //builder.RegisterApiControllers(Assembly.GetExecutingAssembly()).PropertiesAutowired(); builder.RegisterApiControllers(typeof(OperationController).Assembly).PropertiesAutowired(); builder.RegisterAssemblyTypes(Assembly.Load("PSMS.Repository")) .Where(t => t.Name.EndsWith("Repository")) .AsImplementedInterfaces() .InstancePerLifetimeScope(); builder.RegisterType<PsmsDbContext>().InstancePerRequest(); builder.RegisterType<TransactionDbContext>().InstancePerRequest(); builder.RegisterGeneric(typeof(UnitOfWork<>)).As(typeof(IUnitOfWork<>)).InstancePerDependency(); var container = builder.Build(); DependencyResolver.SetResolver(new AutofacDependencyResolver(container)); GlobalConfiguration.Configuration.DependencyResolver = new AutofacWebApiDependencyResolver(container); app.UseWebApi(httpConfig); }我再次重复一遍,相同的配置适用于 ASP.NET MVC 项目。
1 回答
泛舟湖上清波郎朗
TA贡献1818条经验 获得超3个赞
您使用的是 OWIN,而不是经典的 Web API 设置。根据文档:
OWIN 集成中的一个常见错误是使用
GlobalConfiguration.Configuration
. 在 OWIN 中,您从头开始创建配置。GlobalConfiguration.Configuration
使用 OWIN 集成时,您不应在任何地方引用。
切换这个:
GlobalConfiguration.Configuration.DependencyResolver = new AutofacWebApiDependencyResolver(container);
到
httpConfig.DependencyResolver = new AutofacWebApiDependencyResolver(container);
另外,不确定为什么要设置 MVC 依赖解析器。对于 Web API,您不需要:
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
- 1 回答
- 0 关注
- 143 浏览
添加回答
举报
0/150
提交
取消