2018/4/6 号

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

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

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

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

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

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

报错....

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

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

发现错误来自

也就是这段代码:

 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 开发经历的更多相关文章

  1. 用做网页开发经历了三个阶段(附长篇讨论) good

    用做网页开发经历了三个阶段:第一阶:傻干阶段使用Intraweb,傻瓜型,无需知道javascript,html,css,会pascal就可以了. 第二阶:困惑阶段使用Intraweb,有很多限制,比 ...

  2. 如何快速上手一款新的嵌入式CPU芯片(记录CC2540开发经历)

    新换了工作,需要熟悉新公司的产品开发项目,更新博客就懈怠了,不过环境的不同,也让我对嵌入式开发有了更深刻的理解.在原公司我主要负责在STM32F207芯片平台上, 利用UCOS+LWIP进行嵌入式服务 ...

  3. 零基础ASP.NET Core WebAPI团队协作开发

    零基础ASP.NET Core WebAPI团队协作开发 相信大家对“前后端分离”和“微服务”这两个词应该是耳熟能详了.网上也有很多介绍这方面的文章,写的都很好.我这里提这个是因为接下来我要分享的内容 ...

  4. H5拍照应用开发经历的那些坑儿

    一.项目简介 1.1.项目背景:这是一个在移动终端创新应用的项目,用户在浏览器端(微信/手Q)即可完成与金秀贤的合影,希望通过这样一种趣味体验,引发用户的分享与转发的热潮. 1.2.系统要求:ios6 ...

  5. .net程序员转行做手游开发经历(二)

    上篇主要介绍自己个人的经历,这篇主要讲下学习新语言的过程. 上次说到最终选择的语言是swift,框架用spritekit,上次有网友对为什么选择用这俩呢,为什么不用cocos和unity呢,cocos ...

  6. .net程序员转行做手游开发经历(一)

    从辞职到自己开发游戏也有几个月的时间了,游戏也已经在AppStore上线了,我觉得我有必要写点东西,算是留下的一些记忆,也可以和广大博友分享下自己的创业经历,这可能不是一篇成功的创业经历,因为故事还在 ...

  7. .net core webapi 前后端开发分离后的配置和部署

    背景:现在越来越多的企业都采用了在开发上前后端分离,前后端开发上的分离有很多种,那么今天,我来分享一下项目中得的前后端分离. B/S  Saas 项目:(这个项目可以理解成个人中心,当然不止这么点功能 ...

  8. C# WebApi过滤器(开发接口必备利器)

    在WEB Api中,引入了面向切面编程(AOP)的思想,在某些特定的位置可以插入特定的Filter进行过程拦截处理.引入了这一机制可以更好地践行DRY(Don’t Repeat Yourself)思想 ...

  9. 十余年软件开发经历,经验总结和程序一览(涉及Socket、WPF、vc++、CAD、图像、GIS)

    前言 本文主要介绍我开发的几款软件产品,大概介绍一下功能.可以让读者了解本人的开发能力,所擅长的方面.有相关开发需求可以联系作者. 本人开发软件多年,从事的行业也多种多样:自然接触了不同的业务,开发了 ...

随机推荐

  1. 关于 CI框架访问数据库类提示Call to undefined function mysqli_init() 问题解决

    我上次实践发现,安装在Win10 WampServer3.0.4集成环境,不仅打不开phpmyadmin会报错就算了,而且报错后又没提示那么解决,同时你打开php扩展配置发现,WampServer系统 ...

  2. (3)Deep Learning之神经网络和反向传播算法

    往期回顾 在上一篇文章中,我们已经掌握了机器学习的基本套路,对模型.目标函数.优化算法这些概念有了一定程度的理解,而且已经会训练单个的感知器或者线性单元了.在这篇文章中,我们将把这些单独的单元按照一定 ...

  3. python数据类型——字符串类型

    字符串(string) 字符串,就是字符连成一串,是由字符组成的序列.字符串有编码问题,在之前我已经讲过.本节主要讲字符串的使用. 创建字符串,不用多说: a='123abcd' b='diamond ...

  4. python数据类型——字典类型

    字典(dictionary) python中唯一的映射类型,采用键值对(key-value)的形式储存数据,python对key进行哈希函数运算,所以key值必须是可哈希的,可哈希表示key必须是不可 ...

  5. 解决linux安装软件:/lib/ld-linux.so.2: bad ELF interpreter问题

    问题:64位系统中安装了32位程序解决办法 是因为64位系统中安装了32位程序 解决方法: yum install glibc.i686

  6. SQL Server将自己的查询结果作为待查询数据子列之二

    嵌套子查询是SQL语句中比较常用的一种查询方法,开发过程中遇到查询需要将自己的某列作为待查询的数据,在参考别人的SQL语句的写法终于实现了自己需要的功能. 不太和谐查询语句如下: SELECT DIS ...

  7. Spring Data(二)查询

    Spring Data(二)查询 接着上一篇,我们继续讲解Spring Data查询的策略. 查询的生成 查询的构建机制对于Spring Data的基础是非常有用的.构建的机制将截断前缀find-By ...

  8. WCF服务自我寄宿

    WCF服务的寄宿方式 WCF寄宿方式是一种非常灵活的操作,可以寄宿在各种进程之中,常见的寄宿有: IIS服务.Windows服务.Winform程序.控制台程序中进行寄宿,从而实现WCF服务的运行,为 ...

  9. Selenium webdriver实现截图功能

    可参考http://www.cnblogs.com/tobecrazy/p/3599568.html Webdriver截图时,需要引入: import java.io.File; import ja ...

  10. 归并排序及优化(Java实现)

    普通归并排序 public class MergeSort { /** * @param arr 待排序的数组 * @param left 本次归并的左边界 * @param mid 本次归并的中间位 ...