温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Unity控制反转的方法是什么

发布时间:2022-01-07 20:10:30 来源:亿速云 阅读:210 作者:iii 栏目:编程语言

本篇内容主要讲解“Unity控制反转的方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Unity控制反转的方法是什么”吧!

控制反转上层不依赖下层,而是依赖第三方依赖注入容器

上次的SimpleFactory就可以看做是第三方容器。学生student依赖SimpleFactory 而不直接依赖细节(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();             }

这里用的是依赖注入中的属性注入,属性注入在构造函数注入之后执行,而且需要增加[Dependency]这个特性,并且需要添加using Microsoft.Practices.Unity;的引用,所以大部分时候都用构造函数注入更方便, 还有方法注入项目中用的很少,在方法上加[InjectionMethod]特性Unity控制反转的方法是什么

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函数修改

 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控制反转的方法是什么”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI