webapi 使用Autofac 开发经历

Posted 广州宁骑

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了webapi 使用Autofac 开发经历相关的知识,希望对你有一定的参考价值。

 2018/4/6 号

  早上五点..被手机震动吵醒。

  之后直接打开电脑,打算再加强下我自己的webapi这套东西。

  虽然三年的工作经验接触了N多框架和各种风格的开发方式,但是让我自己来搞一套实在不会搞,学基础的时候学过,但也早已忘了,所以搞架构无从下手。

于是我上网百度了一篇文章

 文章地址:https://www.cnblogs.com/zzqvq/p/5816091.html

 按照这篇文章所述,我弄好了..跑起来,写个简单的ajax请求了我webapi当中的一个方法

  报错....

  

 

  What?我之前一直好好的,为啥会报错?

  开启调试(一般写完代码我会不开调试先跑一遍)

  发现错误来自 

   

 也就是这段代码:

1 private IBLL.IUserService UserService = BLLContainer.Container.Resolve<IBLL.IUserService>();  

错误原因全是英文,我这个没上过高中,毕业考试英语也只有30分的渣渣,依靠着我三年来写代码的经验,认出了里面的几个关键英语词汇

 注册,控制器

 再理解联通一下,大概意思就是什么什么没有注册什么什么

 ..理解玩报错原因后我就懵了

  

心理暗骂了一声后无奈的查找具体原因,接着..我就发现是一个叫 Autofac的东西,Autofac是什么?在我找到的那篇文章中好像是什么依赖注入什么玩意

 依赖注入又是什么?IOC又是什么?

不怕,由于我是自学来的,我基础差的一塌糊涂,不过问题我依旧能解决,于是我带着一丝不安(准备放弃刚才的代码重新上网找套)与自卑(基础太垃圾了)的心情去百度这个Autofac。

 搜索:“Autofac webapi 注册“

 搜到很多东西,最终经过一系列的排查,尝试终于找到了一个很稳健的解决方案

 地址是:https://q.cnblogs.com/q/67709/

 我拿到了一段代码

 

我也果断(其实是看其他文章受影响,也学着丢到Globla里面..)的放在了Globla里面的Application_Start方法里

 好了,开始运行(这个时候我感觉告诉我,事情远远没有这么简单)

 果然,接着报错...此时我依旧弄了两个多小时了,我内心又点崩溃,但是又不想放弃,因为如果搞好了这是自己进步的验证,搞不好,自己今早的研究又白费了,代码也白写了。

 想了想面试官的嘲笑,和以前的面试经历

(我17岁开始上班,三年后就是今年重新找工作的时候,我有20了,但是我是那种天生娃娃脸,看起来像个中学生,几乎到一个地方面试都要解嘲一波质疑和嘲笑与不屑,总之,我觉得十分不尊重人,然而讽刺的是,有一家公司面试官是个外国人,在这个外国人面试的时候我能感受到他把我当作了一个正常的上班族面试的人来跟我交谈*有翻译人员的,最后犹豫另一家公司依旧招了我我也没去)

 想了这些,我觉得我不能只停留在现阶段,我得往各个技术更深层次得去学习,同时也告诫自己不管工作了多少年,不管在学习什么新技术,永远不要忘了基础得弥补包括英文阅读能力与基础得巩固,工作上每接触一个框架都会去感叹设计者得牛逼... 还有深深的自卑,如果自己来设计这些,完全不会有那么全面,当然同时也在学习这种设计艺术。

 经过由上思想斗争后,我再次开始了排查与全神贯注的注视我的代码

 终于,我在最开始的那篇博文中照抄的代码中发现了autofac的注册方式

 

 原本的代码是:

 

  var builder = new ContainerBuilder();
            //格式:builder.RegisterType<xxxx>().As<Ixxxx>().InstancePerLifetimeScope();
            builder.RegisterType<BLL.UserService>().As<BLL.UserService>().InstancePerLifetimeScope();

            container = builder.Build();

这时候我脑袋灵光一闪,马萨卡....

   返回头看看我丢在Globla中的代码

    卧槽???

  对比一下..。Globla中的代码照我这样用根本就是废的啊!!!

 于是,我把这一段放到了我的Container类那个初始化的方法的container = builder.Build();前

 builder.RegisterAssemblyTypes(Assembly.GetExecutingAssembly()).AsImplementedInterfaces().AsSelf();
            container = builder.Build();

运行..

 果然。。。

最后未了验证我的想法,我把Globla中的代码删了,再运行测试

正常。。。

 

  经过这一番的折腾,我心里已经有点明白autofac作用是什么了。。还有就是相关配置。

   另外,其中还有一个遇到的错误没提,就是我参考的那篇博文呢,是MVC方式,MVC注册autofac与webapi注册autofac存在着差异,就是我后面加的那个

 而且特表要注意!!!!

 你添加

 这个autofac webapi 引用的时候,要注意版本是不是和当前的webapi版本对应,一开始我安装了个 3 的...结果报一个错

 也是查了一会,发现是版本不对应的问题,于是我重新安装了一个 2的,看版本就不用多说了吧,右键属性....

 此篇文章当作自己的一个经历(因为解决完后实在很开心,要是以前我根本不能理解,果然工作的多了有些东西自然而然的就上手了,我之前是完全没接触过这块..)

 另外也可以当作 扶着往事走 前辈的这篇文章 https://www.cnblogs.com/zzqvq/p/5816091.html  的一个衍生阅读

以上是关于webapi 使用Autofac 开发经历的主要内容,如果未能解决你的问题,请参考以下文章

WebAPI2使用AutoFac依赖注入完整解决方案。

c# autofac结合WebApi的使用

Autofac 同时支持MVC 与Webapi

WebApi中的Autofac

.net webapi+autofac+autoMapper 单元测试

AutoFac实现WebAPI依赖注入(EF以及Mysql)