日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

AutoFac教程一:如何去使用AutoFac和控制反转的思想

發(fā)布時(shí)間:2023/12/29 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 AutoFac教程一:如何去使用AutoFac和控制反转的思想 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

“控制反轉(zhuǎn)(Inversion of Control,英文縮寫為IoC),對(duì)象在被創(chuàng)建的時(shí)候,由一個(gè)調(diào)控系統(tǒng)內(nèi)所有對(duì)象的外界實(shí)體,將其所依賴的對(duì)象的引用,傳遞給它。也可以說,依賴被注入到對(duì)象中。所以,控制反轉(zhuǎn)是,關(guān)于一個(gè)對(duì)象如何獲取他所依賴的對(duì)象的引用,這個(gè)責(zé)任的反轉(zhuǎn)。

簡單來講 就是使用更簡單的方式去對(duì)對(duì)象和接口進(jìn)行操作進(jìn)行調(diào)用
依賴注入就是對(duì)這種思想的代碼實(shí)現(xiàn)

好的 我們來用例子去進(jìn)行理解 我們建立一個(gè)控制臺(tái)程序
定義一個(gè)接口兩個(gè)類實(shí)現(xiàn)

namespace AutoFacStudy.Service {public interface IService{void StudyAutoFac();} } using AutoFacStudy.Service; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace AutoFacStudy.Model {public class TwiceStudy : IService{public void StudyAutoFac(){Console.WriteLine("學(xué)習(xí)兩下AutoFac");}} } using AutoFacStudy.Service; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace AutoFacStudy.Model {public class OnceStudy : IService{public void StudyAutoFac(){Console.WriteLine("學(xué)習(xí)一下AutoFac");}} }

在以往的操作中 我們對(duì)類進(jìn)行實(shí)例化
當(dāng)然我們也可以使用接口多態(tài)的特性進(jìn)行實(shí)例化
以前代碼是這么寫的

運(yùn)行

好像挺簡單的 創(chuàng)建對(duì)象調(diào)用方法就是這么個(gè)過程

那么現(xiàn)在 我們來看看控制反轉(zhuǎn)怎么去做這件事情
先nutget一下AutoFac
刪掉上面那些代碼 換上新的

using Autofac; using AutoFacStudy.Model; using AutoFacStudy.Service; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace AutoFacStudy {class Program{private static IContainer Container { get; set; }static void Main(string[] args){var builder = new ContainerBuilder();// Usually you're only interested in exposing the type// via its interface:builder.RegisterType<OnceStudy>().AsSelf().As<IService>();builder.RegisterType<TwiceStudy>().AsSelf();// However, if you want BOTH services (not as common)// you can say so://builder.RegisterType<OnceStudy>().AsSelf().As<IService>();Container = builder.Build();var scope = Container.BeginLifetimeScope();var once = scope.Resolve<OnceStudy>();var twice = scope.Resolve<TwiceStudy>();once.StudyAutoFac();twice.StudyAutoFac();// The WriteDate method is where we'll make use// of our dependency injection. We'll define that// in a bit.//OnceStudy os = new OnceStudy();Console.ReadKey();}} }

可以很直觀的看出來
我們?cè)瓉淼膎ew 不見了 反而是直接用類名進(jìn)行了一些操作

前面這么多做了一件什么事情呢
建立了一個(gè)容器
容器干什么的呢
用來管理我們需要注冊(cè)的類
或者說幫我們?nèi)ew 這些對(duì)象

然后我們通過容器來對(duì)這些對(duì)象進(jìn)行操作

同樣 運(yùn)行

我們不在去new對(duì)象 而是使用容器去拿
并且可以對(duì)這些對(duì)象的生命周期什么的進(jìn)行設(shè)置
還有很多 這里講不到那么多
先這樣

總結(jié)

以上是生活随笔為你收集整理的AutoFac教程一:如何去使用AutoFac和控制反转的思想的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。