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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Autofac IoC容器基本使用步骤【1】

發布時間:2023/12/13 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Autofac IoC容器基本使用步骤【1】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原文:http://www.bkjia.com/Asp_Netjc/888119.html? 【原文中有一個地方報錯,下面已修改】

一.基本步驟:

1.設計適合控制反轉(IoC)的應用程序

2.給應用程序Autofac?引用.

3.注冊組件.

4.創建一個Container以備后用.

5.從Container創建一個 lifetime scope .

6.使用這個Lifetime Scope?來解析組件的實例.

二.詳細介紹:

1.什么是控制反轉?

  控制反轉(Inversion of Control,英文縮寫為IoC)是一個重要的面向對象編程的法則來削減計算機程序的耦合問題。 控制反轉還有一個名字叫做依賴注入(Dependency Injection)。簡稱DI。IoC就是IoC,不是什么技術,與GoF一樣,是一種 設計模式

  Interface Driven Design接口驅動,接口驅動有很多好處,可以提供不同靈活的子類實現,增加代碼穩定和健壯性等等,但是接口一定是需要實現的,也就是如下語句遲早要執行:AInterface a = new AInterfaceImp(); 這樣一來,耦合關系就產生了;而采用了IoC之后,我們的就把創建接口的一個實例交給IoC容器.從而實現了解耦.

所以我們在編程的時候的原則之一就是"針對接口編程",這里的"接口"不是指一要是個接口類型,它可以是C#語言中的接口類型,也可以一個具體的父類.

public interface ILcService{string ServiceName { get; }}public class LcService:ILcService{public string ServiceName{get;set;}}


2.怎么添加Autofac的引用?

? 1)我們可以到Autofac官網下載dll文件,然后在Visualstudio的項目中添加引用

?

?? 2)也可以使用NuGet?安裝autofac包.

?3.怎樣注冊組件?

?  在Autofac中,我們使用一個ContainerBuilder類的實例來注冊我們的我們的組件.?Autofac提供了Register方法家族,方便我們注冊組件.

ContainerBuilder builder = new ContainerBuilder();//builder.RegisterType<ILcService>().As<LcService>().InstancePerDependency();
//此處報錯: The type 'AutofacIocApp.ILcService' is not assignable to service 'AutofacIoc’
//原文中注冊順序寫反了, An IDynamicQuery is not a DynamicQuery but a DynamicQuery IS an IDynamicQuery.
    builder.RegisterType<LcService>().As<ILcService>().InstancePerDependency();

4.創建一個Container以備后用.
直接調用ContainerBuilder類實例的build()即可.

var container = builder.Build();

5.創建一個Lifetime Sope.

var lifetimescope = container.BeginLifetimeScope();

6.得到我們需要的的實例.

ILcService service = lifetimeScope.Resolve<ILcService>();

?

  我們可以在最后看的出來,使用了IoC之后,就符合設計模式中要求的"針對接口編程,不針對實現編程";創建實例不是使用New關鍵字創建,而是創建實例的工作交給了IoC容器,這就實現了關系解耦,可以在IoC容器中隨便的替換具體的實現類了.

? ? ?還有個問題就是"為什么不直接從Container中直接解析出具體的實例,而要創建一個LifetimeScope,再從它里面解析?"

  ?這個就是考慮到內存泄露問題.? LifetimeScope用完了,就釋放了,它里面的實例也跟著釋放了,就不會出現內存泄露,Container是個root ,永遠不會釋放,如果他里面存在實例.就有可能存在內存泄露問題.

轉載于:https://www.cnblogs.com/jimcsharp/p/6651552.html

總結

以上是生活随笔為你收集整理的Autofac IoC容器基本使用步骤【1】的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。