我正在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
?您理解这一点的帮助表示赞赏。感谢。
答案 0 :(得分:4)
问题是UserDisplayName
是static
属性。
这意味着它的访问方式如下:AppContextSingleton.UserDisplayName
。
如果您将其更改为实例属性public string UserDisplayName { get; set; }
,它将按您的意愿工作。
旁注1:我会从AppContextSingleton
删除Singleton后缀。
旁注2:由于这是WPF,您可能希望实现InotifyPropertyChanged
并在值发生变化时通知它,因为它是可变的。
旁注3:它真的需要公开集吗?