Autofac IoC容器基本使用步骤【1】
原文:http://www.bkjia.com/Asp_Netjc/888119.html? 【原文中有一個地方報錯,下面已修改】
一.基本步驟:
1.設(shè)計適合控制反轉(zhuǎn)(IoC)的應(yīng)用程序
2.給應(yīng)用程序Autofac?引用.
3.注冊組件.
4.創(chuàng)建一個Container以備后用.
5.從Container創(chuàng)建一個 lifetime scope .
6.使用這個Lifetime Scope?來解析組件的實例.
二.詳細介紹:
1.什么是控制反轉(zhuǎn)?
控制反轉(zhuǎn)(Inversion of Control,英文縮寫為IoC)是一個重要的面向?qū)ο缶幊痰姆▌t來削減計算機程序的耦合問題。 控制反轉(zhuǎn)還有一個名字叫做依賴注入(Dependency Injection)。簡稱DI。IoC就是IoC,不是什么技術(shù),與GoF一樣,是一種 設(shè)計模式。
Interface Driven Design接口驅(qū)動,接口驅(qū)動有很多好處,可以提供不同靈活的子類實現(xiàn),增加代碼穩(wěn)定和健壯性等等,但是接口一定是需要實現(xiàn)的,也就是如下語句遲早要執(zhí)行:AInterface a = new AInterfaceImp(); 這樣一來,耦合關(guān)系就產(chǎn)生了;而采用了IoC之后,我們的就把創(chuàng)建接口的一個實例交給IoC容器.從而實現(xiàn)了解耦.
所以我們在編程的時候的原則之一就是"針對接口編程",這里的"接口"不是指一要是個接口類型,它可以是C#語言中的接口類型,也可以一個具體的父類.
public interface ILcService{string ServiceName { get; }}public class LcService:ILcService{public string ServiceName{get;set;}}
2.怎么添加Autofac的引用?
? 1)我們可以到Autofac官網(wǎng)下載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’
//原文中注冊順序?qū)懛戳?#xff0c; An IDynamicQuery is not a DynamicQuery but a DynamicQuery IS an IDynamicQuery.
builder.RegisterType<LcService>().As<ILcService>().InstancePerDependency();
4.創(chuàng)建一個Container以備后用.
直接調(diào)用ContainerBuilder類實例的build()即可.
5.創(chuàng)建一個Lifetime Sope.
var lifetimescope = container.BeginLifetimeScope();6.得到我們需要的的實例.
ILcService service = lifetimeScope.Resolve<ILcService>();?
我們可以在最后看的出來,使用了IoC之后,就符合設(shè)計模式中要求的"針對接口編程,不針對實現(xiàn)編程";創(chuàng)建實例不是使用New關(guān)鍵字創(chuàng)建,而是創(chuàng)建實例的工作交給了IoC容器,這就實現(xiàn)了關(guān)系解耦,可以在IoC容器中隨便的替換具體的實現(xiàn)類了.
? ? ?還有個問題就是"為什么不直接從Container中直接解析出具體的實例,而要創(chuàng)建一個LifetimeScope,再從它里面解析?"
?這個就是考慮到內(nèi)存泄露問題.? LifetimeScope用完了,就釋放了,它里面的實例也跟著釋放了,就不會出現(xiàn)內(nèi)存泄露,Container是個root ,永遠不會釋放,如果他里面存在實例.就有可能存在內(nèi)存泄露問題.
轉(zhuǎn)載于:https://www.cnblogs.com/jimcsharp/p/6651552.html
總結(jié)
以上是生活随笔為你收集整理的Autofac IoC容器基本使用步骤【1】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 邮政银行下午几点上班?中午休息吗?
- 下一篇: 浦发信用卡钱好贷怎么申请?占用额度吗?