Windsor LifeStyle - Shared instance per Graph

前端 未结 2 373
抹茶落季
抹茶落季 2020-12-07 05:02

I have 2 types of ViewModel\'s

      public class ViewModelA 
      {
          IService service;
          private ViewModelB childViewModel; 

                  


        
2条回答
  •  一生所求
    2020-12-07 05:34

    What worked for me is using : LifeStyle BoundTo

        container.Register(Component.For()
                .ImplementedBy()
                .LifeStyle.BoundTo());
    

    Graph :

         public class ViewModelAConductor 
         {
             private List rootViewModels = new List();
             public ViewModelAConductor()
             {
                  ViewModelA a1 = container.Resolvce(); 
                  rootViewModels.Add(a1);
    
                  ViewModelA a2 = container.Resolvce(); 
                  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;                 
              }               
         }  
    

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

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

提交回复
热议问题