我在网站上托管了一堆Silverlight 5应用程序,这些应用程序设置了一些特定于应用程序的数据。其中一个数据是CurrentUser对象。
在启动应用程序(每个)时,它会与Web服务进行通信以获取当前用户信息。但是,需要从SL应用程序中的各种位置访问它。
我认为把它放在Application对象本身是有道理的,但我不确定这是不是一个好习惯。
我将一个包含用户的简单属性放在一个接口中,并在主应用程序类上实现它。
然后,其余的应用程序代码通过静态类访问它:
Public Module ApplicationUtils
Public Property CurrentUser() As ConnectEntities.WebUser
Get
Dim app As ICommonAppData = TryCast(Application.Current, ICommonAppData)
If (app IsNot Nothing) Then
Return app.CurrentUser
End If
Return Nothing
End Get
Set(value As ConnectEntities.WebUser)
Dim app As ICommonAppData = TryCast(Application.Current, ICommonAppData)
If (app IsNot Nothing) Then
app.CurrentUser = value
End If
Throw New NotImplementedException("Current application does not implement required interface")
End Set
End Property
End Module
我对Silverlight并不十分熟悉,所以我试图找出这是否是一种可接受的实践来访问全局数据,或者是否存在复杂性我在这里没有意识到(线程安全问题等等) )。
答案 0 :(得分:0)
我无法在任何地方找到有关需要提升权限才能访问Application.Current属性的任何细节。同样,在我的所有测试中,似乎我可以根据需要访问此属性,而无需具有提升的权限(本地测试以及部署在其他计算机上的应用程序)。
我已经完成了原始设计,一切似乎都运转正常。
这是否是最佳做法,我不知道。但是,对于访问此类数据而言,这似乎是一个相当干净的解决方案。