C# 检查类实例是否已经存在
我想知道我们是否可以显式地编写代码,以便知道该类的实例是否已经可用,如果该实例可用,我们可以处理它,然后创建该类的新实例 我正在做一个WPF和Prism项目,但知识非常有限。 任何帮助都将不胜感激C# 检查类实例是否已经存在,c#,wpf,prism,C#,Wpf,Prism,我想知道我们是否可以显式地编写代码,以便知道该类的实例是否已经可用,如果该实例可用,我们可以处理它,然后创建该类的新实例 我正在做一个WPF和Prism项目,但知识非常有限。 任何帮助都将不胜感激 public class BillingSectionModule : IModule { private IRegionManager _regionManager; private IUnityContainer _unityContainer; public Billi
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。描述问题——而不是你认为的解决方案,因为我认为你的思路不对。