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  的一個衍生閱讀


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM