将用户帐户信息存储在单个对象上

时间:2016-05-09 12:45:23

标签: c# wpf mvvm singleton

我正在Visual Studio 2015中构建一个MVVM Light WPF应用程序。我有以下单例类:

public sealed class AppContextSingleton
{
    private static readonly Lazy<AppContextSingleton> _instance =
        new Lazy<AppContextSingleton>(() => new AppContextSingleton());

    private AppContextSingleton()
    {
    }

    public static AppContextSingleton Instance => _instance.Value;
    public static string UserDisplayName { get; set; }
}

App.xaml.cs中,我有以下代码来验证用户并从Active Directory中获取此人的显示名称:

 protected override void OnStartup(StartupEventArgs e)
{
    base.OnStartup(e);

    var appContext = AppContextSingleton.Instance;

    // Code to authenticate user goes here...

    var displayName = UserPrincipal.Current.DisplayName;
}

在这里,我想在UserDisplayName上设置AppContextSingleton,然后在公共Instance属性中引用它。但是,Instance不允许我访问UserDisplayName属性。如何设置此属性,然后从Instance访问它?

我应该引用Instance还是UserDisplayName?您理解这一点的帮助表示赞赏。感谢。

1 个答案:

答案 0 :(得分:4)

问题是UserDisplayNamestatic属性。

这意味着它的访问方式如下:AppContextSingleton.UserDisplayName

如果您将其更改为实例属性public string UserDisplayName { get; set; },它将按您的意愿工作。

旁注1:我会从AppContextSingleton删除Singleton后缀。

旁注2:由于这是WPF,您可能希望实现InotifyPropertyChanged并在值发生变化时通知它,因为它是可变的。

旁注3:它真的需要公开集吗?