怎么在webapi2中实现autofac的注入,求完整解决方法
var builder = new ContainerBuilder(); HttpConfiguration config = GlobalConfiguration.Configuration; builder.RegisterType<HomeController>(); builder.RegisterApiControllers(Assembly.GetExecutingAssembly()); builder.RegisterAssemblyTypes(Assembly.GetExecutingAssembly()).As<IPerson>() .InstancePerApiRequest(); var container = builder.Build(); config.DependencyResolver = new AutofacWebApiDependencyResolver(container); DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
未能加载文件或程序集“System.Web.Http, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35”或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。 (异常来自 HRESULT:0x80131040) 不行
$aps="Autofac","Autofac.Mvc5","Autofac.WebApi2";foreach($ap in $aps){Install-Package $ap -ProjectName WebApplication1;}Remove-Variable -Name "ap","aps";
@kitrant: 我这边测试是成功的~给你贴Autofac注册的代码:
var builder = new ContainerBuilder(); builder.RegisterControllers(typeof (AutofacHelper).Assembly); var container = builder.Build(); DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
有几个Nuget包需要安装:(以下全部为包的Id)
1、Microsoft.AspNet.Mvc 5.22
2、Autofac.WebApi2
3、Autofac.Mvc5
4、Microsoft.AspNet.WebApi.WebHost (这个很重要,应该能解决你找到System.Web.Http的这个问题)
@幻天芒:
未能加载文件或程序集“System.Web.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35”或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。 (异常来自 HRESULT:0x80131040)
说明: 执行当前 Web 请求期间,出现未经处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
异常详细信息: System.IO.FileLoadException: 未能加载文件或程序集“System.Web.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35”或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。 (异常来自 HRESULT:0x80131040)
源错误:
行 24: DependencyResolver.SetResolver(new AutofacDependencyResolver(container)); 行 25: GlobalConfiguration.Configure(WebApiConfig.Register); |
@kitrant: 请安装:Microsoft.AspNet.WebApi.WebHost。。
@kitrant: 是可以的,如果冲突尝试降级,我也遇到,解决了。如果不是自动扫描你干脆用NeGet安装Ninject,或Unity,一键搞定
你可以参考一下这三个解决方案:
这些我都看过,基本也会用,但是webapi2集成的时候有了点问题,用的是nuget
@kitrant: nuget这个没用过,还是看官网的文档吧。
哟,小号?
?
@kitrant: 咦,难道我错了?我一朋友问过这个问题,我还以为是小号呢~
@幻天芒:
恩,
我的autofac的DLL都是通过nuget package获得。
PM> Install-Package autofac.mvc5 v3.3.0.0
PM> Install-Package autofac.webapi v3.0.0.0
autofac v3.4.0.0
Code:
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));//注册MVC容器
config.DependencyResolver = new AutofacWebApiDependencyResolver(container);//注册api容器,最近在学习autofac依赖注入,可在注册时出现问题。CSDN问过没解决,暂时还扔着
@kitrant: 有些强依赖,比较坑人,哈哈~方案我贴在下面了。新建空Web项目测试通过~
@幻天芒: 哥们 你确定你的可以??
@itwwg: 如果版本一致,曾今应该可以。现在就不知道了。间隔太久了。
@幻天芒: 你的源码还有吗
@itwwg: 多半不好找了。直接去项目地址,看原始demo即可。
@幻天芒: 你的qq多少 你帮我调试一个简单的一个小demo
我记得有Autofac.webapi的package
你看一下,很简单,install后,直接生成configclass.
早就试过了,你试试
我的不可以啊