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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

AutoFac使用笔记以及操作技巧(保姆级操作)

發布時間:2023/12/29 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 AutoFac使用笔记以及操作技巧(保姆级操作) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

背景:

AutoFac是解決項目耦合的比較不錯的框架.是構建大型項目上的一把利器.這里就記錄一下安裝以及使用的過程以及心得.方便新手盡快上手

使用過程:

1.安裝:

2.引入命名空間:

3.兩個部分,注冊+使用:

///注冊容器public Autofac.ContainerBuilder servers{get; set;}///從容器中獲取服務的方式public Autofac.IContainer container{get; set;}

4.創建實用案例:

封裝AutoFac; 創建接口 IAnimation->抽象類 AnimationBase ->三個實現類LineAnimation,SinAnimation,CosinAnimation; 以及 測試類 AnimationTest

實現如下:

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>/// 添加服務并注入./// </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("測試服務");}}

?5:實例講解,以及使用方式

?5.1,默認為構造函數注入,屬性注入,函數注入

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 調用:

AnimationTest Test = gIoc.GetServer<AnimationTest>();首先,這服務默認最后注冊的SinAnimation,做為服務.Test.PrintInfo();更新服務.Test.SetIAniamtion(gIoc.GetServer<LineAnimation>());Test.PrintInfo();///獲取Cosin服務,查看里面是否通過屬性注入了Sin服務.var ConsServer = gIoc.GetServer<CosinAnimation>();ConsServer.PrintF("Cos: ");//成功,里面的屬性Sin服務,注冊成功.

5.3?輸出結果:

?5.4: 內部的實現原理簡單總結為:

因為AutoFac里面的內部實現基本是DIctionary<Type,T>,或者 MultyDictionary<...>,這樣的一個集合,所以,我們要保證通過接口注冊的,使用接口獲取服務,通過實例注冊的,通過實例獲取服務. 否則容易造成獲取不到服務.

總結

以上是生活随笔為你收集整理的AutoFac使用笔记以及操作技巧(保姆级操作)的全部內容,希望文章能夠幫你解決所遇到的問題。

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