使用静态单例时,属性没有获得附加值

时间:2014-09-21 12:44:37

标签: c# wcf

我有一个班级' Instances.cs'包含其他类属性。此类仅使用静态单例初始化一次。此外,每个属性都在get {}内部进行检查,该属性在其属性为null时创建该属性的新实例。我的问题是,当我试图为这些属性中的任何一个添加一些值时,它们只是保持为空。还有一点需要注意的是,这些类被放入我的服务解决方案中,并由服务实例&SVC'访问。我可能做错了。我会感激任何帮助。

Instance.cs所有属性的放置位置:

public class Instances
{
    private SVC.User _user;
    private static Instances instance;

    public Instances()
    {
    }

    /// <summary>
    /// Singleton instance for this class
    /// </summary>
    public static Instances Get
    {
        get
        {
            return (instance != null) ? instance : new Instances();
        }
        set
        {
            instance = value;
        }
    }

    /// <summary>
    /// Property that is always null
    /// </summary>
    public SVC.User User
    {
        get
        {
            return (this._user != null) ? this._user : new SVC.User();
        }
        set
        {
            this._user = value;
        }
    }
}

向用户类添加值

Instances.Get.User.Username = txtAdminName.Text;
Instances.Get.User.IsAdmin = true;

还有一点需要注意,User类包含属性:Username(string)和isAdmin(bool)。

2 个答案:

答案 0 :(得分:2)

如果没有显式设置Get属性,则每次都返回一个不同的实例(因为它不存储新创建的实例)。

你应该像这样实现它:

return instance ?? (instance = new Instances());
顺便说一句,要让你的班级成为一个合适的单身人士,你应该:

  • 将构造函数设为私有
  • 删除Get属性
  • 的setter

此外,Get对于一个属性来说是一个非常糟糕的名字。单例实例的常用名称包括InstanceDefault

关于单身人士模式的好读物:Implementing the Singleton Pattern in C#,作者Jon Skeet

答案 1 :(得分:2)

这不是单身,因为您可以创建同一个类的多个实例。 试试这个:

public static Instances Get
{
   get { return instance ?? (instance = new Instances()); }
}