本篇內(nèi)容主要講解“Unity控制反轉(zhuǎn)的方法是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Unity控制反轉(zhuǎn)的方法是什么”吧!
目前累計服務(wù)客戶近千家,積累了豐富的產(chǎn)品開發(fā)及服務(wù)經(jīng)驗。以網(wǎng)站設(shè)計水平和技術(shù)實力,樹立企業(yè)形象,為客戶提供成都網(wǎng)站設(shè)計、成都網(wǎng)站制作、網(wǎng)站策劃、網(wǎng)頁設(shè)計、網(wǎng)絡(luò)營銷、VI設(shè)計、網(wǎng)站改版、漏洞修補等服務(wù)。創(chuàng)新互聯(lián)始終以務(wù)實、誠信為根本,不斷創(chuàng)新和提高建站品質(zhì),通過對領(lǐng)先技術(shù)的掌握、對創(chuàng)意設(shè)計的研究、對客戶形象的視覺傳遞、對應(yīng)用系統(tǒng)的結(jié)合,為客戶提供更好的一站式互聯(lián)網(wǎng)解決方案,攜手廣大客戶,共同發(fā)展進步。
控制反轉(zhuǎn)上層不依賴下層,而是依賴第三方依賴注入容器
上次的SimpleFactory就可以看做是第三方容器。學生student依賴SimpleFactory 而不直接依賴細節(jié)(Honor)
我們常用的第三方容器就是Unity,在VS中通過NuGet引入Unity的Dll,改造我們的Main方法
static void Main(string[] args) { { BasePhone honor = SimpleFactory.CreatePhone(); IPlayPhone student = SimpleFactory.CreateStudent(); student.PlayPhone(honor); IUnityContainer unityContainer = new UnityContainer(); unityContainer.RegisterType<IPlayPhone, Student>(); var studentUnity = unityContainer.Resolve<IPlayPhone>(); studentUnity.PlayPhone(honor); //Honor honor = new Honor(); //Student student = new Student(); //student.PlayPhone(honor); //student.PlayPhone(lumiaPhone); //student.PlayApplePhone(applePhone); //student.PlayGalaxy(galaxy); //student.PlayHonor(honor); } Console.ReadKey(); }
再將代碼改造下增加IPerson,Iiphone,IGame
public interface IPerson { Iiphone Iphone { get; set; } IGame Game { get; set; } } public class Student: BasePerson, IPerson { [Dependency] public Iiphone Iphone { get; set; } [Dependency] public IGame Game { get; set; } } public class Teacher: BasePerson, IPerson { [Dependency] public Iiphone Iphone { get; set; } [Dependency] public IGame Game { get; set; } }
public interface Iiphone { void UsePhone(); } public class Galaxy:BasePhone, Iiphone { public override void System() { Console.WriteLine("ANDROID"); } public void UsePhone() { Console.WriteLine("Galaxy"); } }
public interface IGame { void Game(); } public class SgsGame:IGame { public void Game() { Console.WriteLine("play 三國殺Game"); } } public class LolGame:IGame { public void Game() { Console.WriteLine("Play LoLGame"); } } static void Main(string[] args) { { IUnityContainer unityContainer = new UnityContainer(); unityContainer.RegisterType<IPerson, Teacher>(); unityContainer.RegisterType<Iiphone, Galaxy>(); unityContainer.RegisterType<IGame, SgsGame>(); var studentUnity = unityContainer.Resolve<IPerson>(); studentUnity.Iphone.UsePhone(); studentUnity.Game.Game(); }
這里用的是依賴注入中的屬性注入,屬性注入在構(gòu)造函數(shù)注入之后執(zhí)行,而且需要增加[Dependency]這個特性,并且需要添加using Microsoft.Practices.Unity;的引用,所以大部分時候都用構(gòu)造函數(shù)注入更方便, 還有方法注入項目中用的很少,在方法上加[InjectionMethod]特性
unity提供更靈活的用配置文件注冊的方法 在項目配置文件增加
<configSections> <section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Microsoft.Practices.Unity.Configuration"/> </configSections> <unity> <containers> <container name="defaultContainer"> <register type="Abstract.IPerson,Abstract" mapTo="Abstract.Teacher, Abstract"/> <register type="Abstract.Iiphone,Abstract" mapTo="Abstract.Galaxy, Abstract"/> <register type="Abstract.IGame,Abstract" mapTo="Abstract.SgsGame, Abstract"/> </container> </containers> </unity>
則Main函數(shù)修改
static void Main(string[] args) { { IUnityContainer unityContainer = new UnityContainer(); UnityConfigurationSection configuration = (UnityConfigurationSection)ConfigurationManager.GetSection(UnityConfigurationSection.SectionName); configuration.Configure(unityContainer, "defaultContainer"); var studentUnity = unityContainer.Resolve<IPerson>(); studentUnity.OutputIdentity(); studentUnity.Iphone.UsePhone(); studentUnity.Game.Game(); } Console.ReadKey(); }
到此,相信大家對“Unity控制反轉(zhuǎn)的方法是什么”有了更深的了解,不妨來實際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學習!
標題名稱:Unity控制反轉(zhuǎn)的方法是什么
文章位置:http://jinyejixie.com/article6/psgcog.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作、網(wǎng)站營銷、網(wǎng)站排名、搜索引擎優(yōu)化、品牌網(wǎng)站制作、小程序開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)