温莎生活方式 - 每图表共享实例 [英] Windsor LifeStyle - Shared instance per Graph

查看:160
本文介绍了温莎生活方式 - 每图表共享实例的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有2种视图模型的的

      public class ViewModelA 
      {
          IService service;
          private ViewModelB childViewModel; 

           public ViewModelA(IService service,ViewModelB childViewModel)
           {
               this.service = service;
               this.childViewModel = childViewModel;
           }

           public ViewModelB ChildViewModel
           {
                get { return childViewModel; } 
            } 
      }  

      public class ViewModelB 
      {
          IService serivce;  
          public ViewModelB(IService service)
          {
              this.service = service;
          }  
      } 

我已经注册成温莎集装箱服务:

I have a Service registered into a Windsor Container :

     public class Service : IService {}

     container.Register(Component.For<IService>()
                  .ImplementedBy<Service >().LifeStyle.Transient); 

我要ViewModelA和ViewModelB分享IService的同一个实例。

I want ViewModelA and ViewModelB to share the same instance of IService.

我不要 wan't ViewModelA和ViewModelB的所有实例共享相同的实例。

I Do not wan't all instances of ViewModelA and ViewModelB to share the same instance.

每个父/子对将有他自己的实例,我wan't实现这个使用DependencyInjection可以这样做?

Each Parent/Child Pair would have his own instance , i wan't to achieve this using DependencyInjection can this be done ?

我wan't这通过依赖注入来完成,因为我有一个下的ViewModels的整体层次上,而不是只有一个(B)视图模型。

I wan't this to be be done through Dependency Injection since i have an entire hierarchy of ViewModels under A and not just one (B) viewmodel.

VM A - > VM B - > VMÇ - > VMð...(和我们说在所有字母生病去)所有这些需要共享IService的同一个实例。

VM A -> VM B -> VM C -> VM D ... (and let's say ill go over the all alphabet) all these need to share the same instance of IService.

和A的另一个实例,它是死者将分享IService的不同实例。

and another instance of A and it's decedents would share a a different instance of IService.

推荐答案

什么工作对我来说是使用:生活方式BoundTo

What worked for me is using : LifeStyle BoundTo

    container.Register(Component.For<IService>()
            .ImplementedBy<Service>()
            .LifeStyle.BoundTo<ViewModelA>());

图:

     public class ViewModelAConductor 
     {
         private List<ViewModelA> rootViewModels = new List<ViewModelA>();
         public ViewModelAConductor()
         {
              ViewModelA a1 = container.Resolvce<ViewModelA>(); 
              rootViewModels.Add(a1);

              ViewModelA a2 = container.Resolvce<ViewModelA>(); 
              rootViewModels.Add(a2); 
         }
     }

     public class ViewModelA
     {
          ViewModelB viewModelB;
          IService service;

          public ViewModelA(IService service,ViewModelB viewModelB) 
          {
              this.service = service;
              this.viewModelB = viewModelB;
          }               
     }

     public class ViewModelB
     {
          ViewModelC viewModelC;
          IService service;

          public ViewModelA(IService service,ViewModelC viewModelC) 
          {
              this.service = service;
              this.viewModelC = viewModelC;
          }               
     }  

     public class ViewModelC
     {
          IService service;

          public ViewModelA(IService service) 
          {
              this.service = service;                 
          }               
     }  

的图形下注入所有的ViewModels的 A1 有IService的同一个实例。

All ViewModels injected under the Graph of a1 have the same instance of IService.

的图形下注入所有的ViewModels A2 有IService的同一个实例。

All ViewModels injected under the Graph of a2 have the same instance of IService.

这篇关于温莎生活方式 - 每图表共享实例的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆