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 
} 

Это класс модуля я Ve написано ... Как вы можете видеть, что есть две точки зрения, связанное с одним модулем. Так что, когда-либо

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

Вы имеете в виду шаблон Singleton? http://csharpindepth.com/articles/general/singleton.aspx – David

+0

Шаблон @David Singleton позволяет сохранить тот же самый экземпляр справа? –

+0

Я хочу иметь новый экземпляр каждый раз, но хочу избавиться от уже созданного экземпляра –

ответ

2

То, что вы ищете, называется Шаблон Singleton. На нем много информации here. Для простоты мы будем использовать первый пример на этой странице.

С одним синглером в приложении имеется только один экземпляр данного объекта. Таким образом, в соответствии с вашими требованиями вы можете просто уничтожить этот экземпляр и заменить его новым. Например:

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

    private Singleton() 
    { 
    } 

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

Конечно, что не ясно, почему вы хотите сделать это. Рассмотрим, что это refactors к:

public sealed class Singleton 
{ 
    private Singleton() 
    { 
    } 

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

На данный момент вы даже не отслеживаете синглтона, вы просто создание нового в любое время он просил. Так зачем это делать в первую очередь? Вы можете просто это еще дальше:

new Singleton(); 

Так что не совсем понятно, почему вы хотите сделать это, но если то, что вы хотите, чтобы отслеживать одного экземпляра объекта в пределах приложения затем Синглтон - это то, как вы это делаете.

Смежные вопросы