MDI应用程序中的Singleton对象

时间:2012-07-26 09:54:16

标签: c# winforms singleton

我有一个基于Tab的多文档界面应用程序,我有一个单独的表单,这个单一表单的对象只是该特定Tab的单例。对于其他Tab,我需要有单个表单的另一个对象,它只是该选项卡的单例对象。

我已经实现了单例模式,但所有选项卡都使用了相同的对象。

编辑:每个TAB负责一个客户的监控活动,SingleForm负责所有控件。当用户移动到监视另一个客户的其他TAB时,我的singleForm会显示以前的客户详细信息。

任何解决方案。请分享。

谢谢,

2 个答案:

答案 0 :(得分:2)

您不能在此处使用Singleton模式。 Singleton模式确保只有一个对象,对应用程序是全局的。

(如果你详细说明一下,例如为什么你首先使用的是单身人士,你可能会得到更详细的答案。)

答案 1 :(得分:1)

看起来像一个糟糕的设计。但如果您真的必须这样做,请尝试这样的事情:

    public class GlobalSingletoneLocator
    {
      private static Dictionary<int,TabOnlyObject> _collection = new Dictionary<int, TabOnlyObject>();
     //Do all singleton initialization
     // ....

      public TabOnlyObject GetServiceByTabID(uint id)
      {
        //initialize and return the new instance of class you tried to use
        if(!_collection.ContainsKey(id))
        {
          var service = new TabOnlyObject();
          _collection.Add(id, service);
         }
        return _collection[id];
       }
}

并在您的标签中可以

var service = GlobalSingletoneLocator.Instance.GetServiceByTabID(this.Id);

而不是

var service = SingletonService.Instance;