C# 检查类实例是否已经存在

C# 检查类实例是否已经存在,c#,wpf,prism,C#,Wpf,Prism,我想知道我们是否可以显式地编写代码,以便知道该类的实例是否已经可用,如果该实例可用,我们可以处理它,然后创建该类的新实例 我正在做一个WPF和Prism项目,但知识非常有限。 任何帮助都将不胜感激 public class BillingSectionModule : IModule { private IRegionManager _regionManager; private IUnityContainer _unityContainer; public Billi

我想知道我们是否可以显式地编写代码,以便知道该类的实例是否已经可用,如果该实例可用,我们可以处理它,然后创建该类的新实例 我正在做一个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
}
公共类计费模块:IModule
{
私有IRegionManager(区域管理器);
私人IUnityContainer\U unityContainer;
公共计费部分模块(IRegionManager regionManager、IUnityContainer unityContainer)
{
这个._regionManager=regionManager;
这。_unityContainer=unityContainer;
}
#区域模块成员
公共无效初始化()
{
_unityContainer.RegisterType();
_unityContainer.RegisterType();
_unityContainer.RegisterType();
_unityContainer.RegisterType();
_regionManager.RegisterViewWithRegion(RegionNames.BillingOptionRegion,typeof(IBillingSectionView));
}
#端区
}
这是我写的模块类。。。 如您所见,有两个视图与单个模块关联。 所以什么时候

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");
}
public void更改为高级区域(IRegionManager regionManager、IUnityContainer unityContainer)
{
//更改计费区域
var BillingAreaview=ServiceLocator.Current.GetInstance();
如果(!regionManager.Regions[RegionNames.BillingOptionRegion].Views.Contains(BillingAreaview))
regionManager.Regions[RegionNames.BillingOptionRegion].Add(BillingAreaview);
regionManager.Regions[RegionNames.BillingOptionRegion]。激活(BillingAreaview);
//重置值
_eventAggregator.GetEvent().Publish(“CHANGEADVANCEITEMFROMREGION”);
}
public void ChangeToNewOrderRegion(IRegionManager regionManager、IUnityContainer unityContainer)
{
//更改计费区域
var BillingAreaview=ServiceLocator.Current.GetInstance();
如果(!regionManager.Regions[RegionNames.BillingOptionRegion].Views.Contains(BillingAreaview))
regionManager.Regions[RegionNames.BillingOptionRegion].Add(BillingAreaview);
regionManager.Regions[RegionNames.BillingOptionRegion]。激活(BillingAreaview);
//重置值
_eventAggregator.GetEvent().Publish(“CHANGENEWITEMFROMREGION”);
}
所以当我先调用上面的functin,然后调用第二个。。尚未释放以前创建的视图模型实例。。但是一个新的被创造了。。。
所以当我第n次打电话的时候。。视图模型中的函数在n个tyms中执行。在应用程序中创建负载问题…

您正在寻找的称为单例模式。关于它有很多信息。为了简单起见,我们将使用该页面上的第一个示例

对于单例,应用程序中只有一个给定对象的实例。因此,根据您的需求,您可以简单地销毁该实例并用新实例替换它。例如:

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();
        }
    }
}
在这一点上,你甚至没有跟踪一个单身汉,你只是在任何时候创建一个新的请求。那么首先为什么要这样做呢?您可以将其进一步简化为:

new Singleton();

因此,我们并不清楚为什么要这样做,但如果您希望跟踪应用程序范围内对象的单个实例,那么单例就是如何做到这一点的。

您是指单例模式吗@David Singleton模式只是保持了相同的实例,对吗?我希望每次都有一个新实例,但希望处理已经创建的实例wpf和/或prism与实例有什么关系?你能添加更多关于你认为一个实例的细节吗?例如,instance声明每次调用构造函数时都会创建一个新实例。因此,在调用构造函数时,永远不会存在现有实例。i、 e.您对“实例”的定义需要进一步澄清。请给出一些您遇到问题的示例代码。当您新建时,将调用ctor。如果您弃置并创建一个新实例,将调用ctor。描述问题——而不是你认为的解决方案,因为我认为你的思路不对。