AutoFac使用笔记以及操作技巧(保姆级操作)
生活随笔
收集整理的這篇文章主要介紹了
AutoFac使用笔记以及操作技巧(保姆级操作)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
背景:
AutoFac是解決項目耦合的比較不錯的框架.是構(gòu)建大型項目上的一把利器.這里就記錄一下安裝以及使用的過程以及心得.方便新手盡快上手
使用過程:
1.安裝:
2.引入命名空間:
3.兩個部分,注冊+使用:
///注冊容器public Autofac.ContainerBuilder servers{get; set;}///從容器中獲取服務(wù)的方式public Autofac.IContainer container{get; set;}4.創(chuàng)建實用案例:
封裝AutoFac; 創(chuàng)建接口 IAnimation->抽象類 AnimationBase ->三個實現(xiàn)類LineAnimation,SinAnimation,CosinAnimation; 以及 測試類 AnimationTest
實現(xiàn)如下:
public interface IAnimation{string Name{get;set;}void PrintF(string str);}public abstract class AnimationBase : IAnimation{public string Name{get;set;}public virtual void PrintF(string str){}}public class LineAnimation : AnimationBase{public LineAnimation():base(){Name = "LineServer";}public override void PrintF(string str){Console.WriteLine($"{Name}: {str}");}}public class SinAnimation : AnimationBase{public SinAnimation() : base(){Name = "SinServer";}public override void PrintF(string str){Console.WriteLine($"{Name}: {str}");}}public class CosinAnimation : AnimationBase{public CosinAnimation() : base(){Name = "CosinServer";}public SinAnimation ISinServer{get;set;}public override void PrintF(string str){ISinServer?.PrintF("屬性注入之: Sin");Console.WriteLine($"{Name}: {str}");}}public class IOC{public Autofac.ContainerBuilder servers{get; set;}public Autofac.IContainer container{get; set;}public IOC(){servers = new ContainerBuilder();}/// <summary>/// 添加服務(wù)并注入./// </summary>public virtual void InitServersAction(Action action){if (servers == null) servers = new ContainerBuilder();{action();}container = servers.Build();}public IServer GetServer<IServer>(){return container.Resolve<IServer>();}}public class AnimationTest{public AnimationTest(IAnimation IAniFace){gAnimation = IAniFace;}public AnimationTest(){}private IAnimation gAnimation{get;set;}public void SetIAniamtion(IAnimation? IAniFace){gAnimation = IAniFace;}public void PrintInfo(){gAnimation?.PrintF("測試服務(wù)");}}?5:實例講解,以及使用方式
?5.1,默認為構(gòu)造函數(shù)注入,屬性注入,函數(shù)注入
IOC gIoc = new IOC();gIoc.InitServersAction(()=> {//通過實例注入. gIoc.servers.RegisterType<LineAnimation>().As<IAnimation, LineAnimation>().InstancePerLifetimeScope().PreserveExistingDefaults();gIoc.servers.RegisterType<SinAnimation>().As<IAnimation, SinAnimation>().InstancePerLifetimeScope(); //這個方式好,同時替代上面三行代碼//屬性注入CosAnimation gIoc.servers.RegisterType<CosinAnimation>().PropertiesAutowired();gIoc.servers.RegisterType<AnimationTest>().InstancePerLifetimeScope();//方式一 ok 常用.});5.2 調(diào)用:
AnimationTest Test = gIoc.GetServer<AnimationTest>();首先,這服務(wù)默認最后注冊的SinAnimation,做為服務(wù).Test.PrintInfo();更新服務(wù).Test.SetIAniamtion(gIoc.GetServer<LineAnimation>());Test.PrintInfo();///獲取Cosin服務(wù),查看里面是否通過屬性注入了Sin服務(wù).var ConsServer = gIoc.GetServer<CosinAnimation>();ConsServer.PrintF("Cos: ");//成功,里面的屬性Sin服務(wù),注冊成功.5.3?輸出結(jié)果:
?5.4: 內(nèi)部的實現(xiàn)原理簡單總結(jié)為:
因為AutoFac里面的內(nèi)部實現(xiàn)基本是DIctionary<Type,T>,或者 MultyDictionary<...>,這樣的一個集合,所以,我們要保證通過接口注冊的,使用接口獲取服務(wù),通過實例注冊的,通過實例獲取服務(wù). 否則容易造成獲取不到服務(wù).
總結(jié)
以上是生活随笔為你收集整理的AutoFac使用笔记以及操作技巧(保姆级操作)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PHP中实现页面跳转的方式(php跳转,
- 下一篇: 数值分析matlab西南交通大学三次样条