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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

[IOC]Unity使用

發布時間:2023/12/31 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [IOC]Unity使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Unity是什么?

unity是patterns&practices團隊開發的一個輕量級、可擴展的依賴注入容器。

Unity特性

1、它提供了創建(或者裝配)對象實例的機制,而這些對象實例可能還包含了其它被依賴的對象實例。

2、Unity允許將預先配置的對象注入到類中,實現了inversion of control(Ioc)的功能。在Unity中,支持constructor injection(構造器注入),property setter injection(屬性設置值注入)和method call injection(方法注入)。

3、支持容器的體系結構。一個容器可以有子容器,允許從子容器到父容器的對象定位查詢。

4、可以通過配置文件進行準備和配置容器。

5、不會影響到類的定義(屬性設置值注入和方法注入除外),這也是輕量級容器的一個體現。

6、支持自定義的容器擴展。

Unity實踐

新建一個控制臺程序,Nuget安裝Unity

新建一個叫IFlyable 飛行能力的接口。

/// <summary>/// 飛行接口/// </summary>public interface IFlyable{void Fly();}

一個飛禽類,并實現飛行的接口

/// <summary>/// 飛禽類/// </summary>public class Bird : IFlyable{public void Fly(){Console.WriteLine("會飛的鳥......");}}

在Main方法中,通過Unity容器實例化一個飛禽對象,并讓它飛。

static void Main(string[] args){IUnityContainer container = new UnityContainer();//注入container.RegisterType<IFlyable, Bird>();IFlyable bird = container.Resolve<IFlyable>();bird.Fly();Console.Read();}

輸出

?如果多個實現類呢?

添加個飛機類,讓其實現飛行接口

/// <summary>/// 飛機/// </summary>public class Plane : IFlyable{public void Fly(){Console.WriteLine("超音速飛行......");}}

main方法

static void Main(string[] args){IUnityContainer container = new UnityContainer();//注入container.RegisterType<IFlyable, Bird>();container.RegisterType<IFlyable, Plane>();IFlyable bird = container.Resolve<IFlyable>();IFlyable plane = container.Resolve<IFlyable>();bird.Fly();plane.Fly();Console.Read();}

結果

Unity:在一個接口有多個實現的情況下,如果沒有進行別名區分,會選擇最后注入的實現。

加入別名

static void Main(string[] args){IUnityContainer container = new UnityContainer();//注入container.RegisterType<IFlyable, Bird>("bird");container.RegisterType<IFlyable, Plane>("plane");IFlyable bird = container.Resolve<IFlyable>("bird");IFlyable plane = container.Resolve<IFlyable>("plane");bird.Fly();plane.Fly();Console.Read();}

結果

注意

當一個接口有多個實現類的時候,注入的時候需要通過別名進行區分。

構造函數注入

我們添加一個接口

/// <summary>/// 具有會叫能力的接口/// </summary>public interface ISayable{IFlyable Fly { set; get; }void Say();}

添加一個鸚鵡類,有飛行能力,并且會叫

/// <summary>/// 鸚鵡類/// </summary>public class Parrot : ISayable{public IFlyable Fly{get;set;}public Parrot(IFlyable fly){this.Fly = fly;}public void Say(){Console.WriteLine("會叫....");}}

main方法中,注入

static void Main(string[] args){IUnityContainer container = new UnityContainer();//注入//構造函數中注入 鳥類對象container.RegisterType<IFlyable, Bird>();container.RegisterType<ISayable, Parrot>();ISayable Parrot = container.Resolve<ISayable>();Parrot.Fly.Fly();Parrot.Say();Console.Read();}

結果

屬性注入

/// <summary>/// 鸚鵡類/// </summary>public class Parrot : ISayable{[Dependency]public IFlyable Fly{get;set;}public void Say(){Console.WriteLine("會叫....");}}

通過在屬性上面添加[Dependency]特性,即可注入。

Main方法與上面的相同。

結果同樣。

初始化器注入

說是初始化器,其實就是一個方法。但是個特別的方法,這個方法需要添加特性[InjectionMethod] ?

/// <summary>/// 鸚鵡類/// </summary>public class Parrot : ISayable{public IFlyable Fly{get;set;}[InjectionMethod]public void Init(IFlyable fly){this.Fly = fly;}public void Say(){Console.WriteLine("會叫....");}}

結果

總結

以上是生活随笔為你收集整理的[IOC]Unity使用的全部內容,希望文章能夠幫你解決所遇到的問題。

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