Unity Application Block 1.0系列(5): 使用BuildUp让已存在对象
通过Unity容器的BuildUp方法可以让已存在的对象实例也可以支持依赖注入。
publicclass
Owner
{ publicstring Name { get { return"Inrie" ; } } publicint Age { get { return24 ; } } } publicabstractclass Player { publicabstractvoid Play(); publicabstractstringName{get ;} [Dependency] publicOwnerOwner{get;set ;} } publicclass Mp3Player:Player { publicoverridevoid Play() { Console.WriteLine("PlayingMp3" ); } publicoverridestring { return"Mp3Player" ; } } } publicclass CDPlayer:Player { publicoverridevoid Play() { Console.WriteLine("PlayingCD" return"CDPlayer" DVDPlayer:Player { publicoverridevoid Play() { Console.WriteLine("PlayingDVD" return"DVDPlayer" ; } } } 开始 在系统的某个组件或类库中有个方法,该方法返回一个对象实例。
publicclass
CoreLib
{ public PlayerCreatePlayer() { returnnew Mp3Player(); } }
CoreLibcoreLib=new
CoreLib();
Playerplayer= coreLib.CreatePlayer(); Console.WriteLine(player.Owner.Name);
[Dependency]
publicOwnerOwner{get;set;} 在 Unity Application Block 1.0系列(3):属性注入 中对属性注入做了较详细的说明。通过为属性加上[Dependency]标签,然后通过Unity容器的Resolve方法自动做依赖注入,获取对象的实例。但是这种做法有个前提,就是对象的创建需要在我们的控制范围之内,也就是说这个对象需要在程序中创建(Resolve方法就是返回一个对象实例),而不是组件或类库中就创建好了。 对于这种情况,Unity提供了BuildUp方法来实现这样的需求。 BuildUp有以下几个重载方法: BuildUp< T>(T existing) BuildUp< T>(T existing,string name) BuildUp(Type t,object existing) BuildUp(Type t,object existing,string name) 还是实现上例中输出播放器拥有者名字的需求,把那段代码改为: IUnityContainercontainer=new
UnityContainer();
CoreLibcoreLib=new CoreLib(); Playerplayer=container.BuildUp<Player> (coreLib.CreatePlayer()); Console.WriteLine(player.Owner.Name); 输出为: 可以看出BuildUp方法已经自动为我们做了依赖注入了。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |