属性在使用静态singleton时未获得附加值
本文关键字:附加值 singleton 静态 属性 | 更新日期: 2023-09-27 18:23:43
我有一个包含其他类属性的类"Instances.cs"。此类仅使用静态singleton初始化一次。此外,每个属性在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(字符串)和isAdmin(bool)。
如果没有显式设置Get
属性,它每次都会返回一个不同的实例(因为它不存储新创建的实例)。
你应该这样实现它:
return instance ?? (instance = new Instances());
顺便说一句,为了让你的类成为一个合适的单例,你应该:
- 将构造函数设为私有
- 删除
Get
属性的setter
此外,Get
对于属性来说是一个相当糟糕的名称。singleton实例的常用名称包括Instance
和Default
。
关于singleton模式的一篇好文章:Jon Skeet
这不是单例,因为您可以创建同一类的多个实例。试试这个:
public static Instances Get
{
get { return instance ?? (instance = new Instances()); }
}