首页 新闻 搜索 专区 学院

怎么在webapi2中实现autofac的注入,求完整解决方法

0
悬赏园豆:200 [已解决问题] 解决于 2014-12-02 17:06

怎么在webapi2中实现autofac的注入,求完整解决方法

kitrant的主页 kitrant | 初学一级 | 园豆:22
提问于:2014-11-24 13:13
< >
分享
最佳答案
1
      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)); 
收获园豆:110
Halower | 小虾三级 |园豆:1723 | 2014-11-24 16:07

未能加载文件或程序集“System.Web.Http, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35”或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。 (异常来自 HRESULT:0x80131040) 不行

kitrant | 园豆:22 (初学一级) | 2014-11-24 22:07

$aps="Autofac","Autofac.Mvc5","Autofac.WebApi2";foreach($ap in $aps){Install-Package $ap -ProjectName WebApplication1;}Remove-Variable -Name "ap","aps";

kitrant | 园豆:22 (初学一级) | 2014-11-24 22:11

@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的这个问题)
幻天芒 | 园豆:36662 (高人七级) | 2014-11-25 10:23

@幻天芒: 

未能加载文件或程序集“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 | 园豆:22 (初学一级) | 2014-11-25 20:34

@kitrant: 请安装:Microsoft.AspNet.WebApi.WebHost。。

幻天芒 | 园豆:36662 (高人七级) | 2014-11-25 23:38

@kitrant: 是可以的,如果冲突尝试降级,我也遇到,解决了。如果不是自动扫描你干脆用NeGet安装Ninject,或Unity,一键搞定

Halower | 园豆:1723 (小虾三级) | 2014-11-26 09:47
其他回答(4)
0
收获园豆:19
Mr.Brian | 园豆:1518 (小虾三级) | 2014-11-24 13:32

这些我都看过,基本也会用,但是webapi2集成的时候有了点问题,用的是nuget

支持(0) 反对(0) kitrant | 园豆:22 (初学一级) | 2014-11-24 13:34

@kitrant: nuget这个没用过,还是看官网的文档吧。

支持(0) 反对(0) Mr.Brian | 园豆:1518 (小虾三级) | 2014-11-24 13:38
0

哟,小号?

收获园豆:60
幻天芒 | 园豆:36662 (高人七级) | 2014-11-24 13:33

?

支持(0) 反对(0) kitrant | 园豆:22 (初学一级) | 2014-11-24 13:36

@kitrant: 咦,难道我错了?我一朋友问过这个问题,我还以为是小号呢~

支持(0) 反对(0) 幻天芒 | 园豆:36662 (高人七级) | 2014-11-24 13:37

@幻天芒: 

恩,

我的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问过没解决,暂时还扔着

支持(0) 反对(0) kitrant | 园豆:22 (初学一级) | 2014-11-24 13:40

@kitrant: 有些强依赖,比较坑人,哈哈~方案我贴在下面了。新建空Web项目测试通过~

支持(0) 反对(0) 幻天芒 | 园豆:36662 (高人七级) | 2014-11-25 10:28

@幻天芒: 哥们 你确定你的可以??

支持(0) 反对(0) 凤城沙子 | 园豆:134 (初学一级) | 2017-03-29 14:29

@itwwg: 如果版本一致,曾今应该可以。现在就不知道了。间隔太久了。

支持(0) 反对(0) 幻天芒 | 园豆:36662 (高人七级) | 2017-03-29 22:26

@幻天芒: 你的源码还有吗

支持(0) 反对(0) 凤城沙子 | 园豆:134 (初学一级) | 2017-03-30 08:52

@itwwg: 多半不好找了。直接去项目地址,看原始demo即可。

支持(0) 反对(0) 幻天芒 | 园豆:36662 (高人七级) | 2017-03-30 08:59

@幻天芒: 你的qq多少 你帮我调试一个简单的一个小demo

支持(0) 反对(0) 凤城沙子 | 园豆:134 (初学一级) | 2017-03-30 09:04
0

我记得有Autofac.webapi的package

你看一下,很简单,install后,直接生成configclass.

收获园豆:1
南昌炒粉 | 园豆:714 (小虾三级) | 2014-11-25 01:00

早就试过了,你试试

支持(0) 反对(0) kitrant | 园豆:22 (初学一级) | 2014-11-25 10:23
0

我的不可以啊

凤城沙子 | 园豆:134 (初学一级) | 2017-03-28 11:02
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册