2014-09-29 4 views
0

클래스의 인스턴스가 이미 사용 가능한지 여부를 알 수 있도록 명시 적으로 코드를 작성할 수 있는지 여부를 알고 싶습니다. 인스턴스를 사용할 수있는 경우이를 처리 한 다음 새 인스턴스를 처리 할 수 ​​있습니다. 클래스의 생성이 가능합니다 WPF와 Prism에서 매우 제한된 지식으로 프로젝트를 진행하고 있습니다. 도움이 될 것입니다. 클래스 인스턴스가 이미 존재하는지 확인하십시오.

public class BillingSectionModule : IModule 
{ 
    private IRegionManager _regionManager; 
    private IUnityContainer _unityContainer; 

    public BillingSectionModule(IRegionManager regionManager, IUnityContainer unityContainer) 
    { 
     this._regionManager = regionManager; 
     this._unityContainer = unityContainer; 
    } 

    #region IModule Members 

    public void Initialize() 
    { 
     _unityContainer.RegisterType<IBillingSectionViewModel, BillingSectionViewModel>(); 
     _unityContainer.RegisterType<IBillingSectionView, BillingSectionView>(); 
     _unityContainer.RegisterType<IBillingSectionAdvanceBillingViewModel, BillingSectionAdvanceBillingViewModel>(); 
     _unityContainer.RegisterType<IBillingSectionAdvanceBillingView, BillingSectionAdvanceBillingView>(); 
     _regionManager.RegisterViewWithRegion(RegionNames.BillingOptionRegion, typeof(IBillingSectionView)); 
    } 

    #endregion 
} 

내가 작성 쉬게 모듈 클래스입니다 ... 단일 모듈과 관련된 두 개의보기가 볼 수 있듯이. 그래서 그래서 이제까지

public void ChangeToAdvanceRegion(IRegionManager regionManager, IUnityContainer unityContainer) 
{ 


    //change Billing Area 
    var BillingAreaview = ServiceLocator.Current.GetInstance<IBillingSectionAdvanceView>(); 
    if (!regionManager.Regions[RegionNames.BillingOptionRegion].Views.Contains(BillingAreaview)) 
     regionManager.Regions[RegionNames.BillingOptionRegion].Add(BillingAreaview); 
    regionManager.Regions[RegionNames.BillingOptionRegion].Activate(BillingAreaview); 


    //reset the values 
    _eventAggregator.GetEvent<NewItemOrderEvent>().Publish("CHANGEADVANCEITEMFROMREGION"); 
} 

public void ChangeToNewOrderRegion(IRegionManager regionManager, IUnityContainer unityContainer) 
{ 

    //change Billing Area 
    var BillingAreaview = ServiceLocator.Current.GetInstance<IBillingSectionView>(); 
    if (!regionManager.Regions[RegionNames.BillingOptionRegion].Views.Contains(BillingAreaview)) 
     regionManager.Regions[RegionNames.BillingOptionRegion].Add(BillingAreaview); 
    regionManager.Regions[RegionNames.BillingOptionRegion].Activate(BillingAreaview); 


    //reset the values 
    _eventAggregator.GetEvent<NewItemOrderEvent>().Publish("CHANGENEWITEMFROMREGION"); 
} 

때 먼저 다음보기 모델의 이전에 생성 된 인스턴스가 배치되어 있지 않은 .. 두번째 .. 그러나 새로 생성되는 functin 상기 호출 적 ... 그래서 내가 n 번째 시간을 호출 할 때 .. 뷰 모델 내부의 함수는 n 개의 tyms로 실행됩니다. 응용 프로그램에서 부하 문제를 생성 ....

+3

당신은 싱글 톤 패턴을 언급하고 있습니까? http://csharpindepth.com/articles/general/singleton.aspx – David

+0

@David 싱글 톤 패턴은 바로 같은 인스턴스를 유지합니까? –

+0

매번 새로운 인스턴스를 갖고 싶지만 이미 생성 된 인스턴스를 처리하고 싶습니다. –

답변

2

당신이 찾고있는 것은 싱글 톤 패턴이라고합니다. 거기에 많은 정보가 here입니다. 간단히하기 위해 첫 번째 예를 해당 페이지에서 사용합니다.

싱글 톤을 사용하면 응용 프로그램에서 주어진 객체의 인스턴스가 하나만 존재합니다. 따라서 요구 사항에 따라 인스턴스를 삭제하고 새 인스턴스로 대체 할 수 있습니다. 예를 들어 : 물론

public sealed class Singleton 
{ 
    private static Singleton instance=null; 

    private Singleton() 
    { 
    } 

    public static Singleton Instance 
    { 
     get 
     { 
      instance = new Singleton(); 
      return instance; 
     } 
    } 
} 

, 가 명확하지 당신이이 일을하려는 이유무엇이다. 당신도 방금 새에게이 요청 상관 없음 시간을 만들, 싱글을 추적하지 않는이 시점에서

public sealed class Singleton 
{ 
    private Singleton() 
    { 
    } 

    public static Singleton Instance 
    { 
     get 
     { 
      return new Singleton(); 
     } 
    } 
} 

이가 refactors 생각해보십시오. 그런데 왜 이것을 처음부터합니까? 더욱에 당신은 단순히이 할 수

new Singleton(); 

그래서 정말 분명하지 않다 이 작업을 수행하기를 원하지만 당신이 원하는 것은 경우 다음 응용 프로그램의 범위 내에서 객체의 단일 인스턴스를 추적 싱글 톤 (Singleton)은 그렇게하는 방법입니다.

관련 문제