2015-04-22 78 views
0

我使用CSLA的RegisterProperty。我的属性连接到资源上也有DisplayAttribute和DisplayNameAttribute。我注意到我的每个RegisterProperty的.Name属性都被缓存了。如果我切换语言,.Name不刷新。这导致麻烦,因为我使用StringLengthAttribute和其他人来处理一些业务规则。RegisterProperty缓存显示名称

有没有办法刷新.Name或确保值没有被缓存?

+0

是的,这可能是CSLA过度优化性能的情况,应该每次都重新评估属性。 –

+1

https://github.com/MarimerLLC/csla/issues/344 –

+0

@RockfordLhotka谢谢你,自定义属性确实做了这项工作。 –

回答

0

现在我决定创建我自己的属性,它将显示名称作为参数。我有一种方法来禁用缓存。

Public Class StringLengthExAttribute 
    Inherits StringLengthAttribute 

    Private _displayResourceName As String = "" 

    Public Sub New(ByVal maximumLength As Integer) 
     MyBase.New(maximumLength) 

     Me.ErrorMessageResourceName = "ruleExceedMaxCharacter" 
     Me.ErrorMessageResourceType = GetType(My.Resources) 

    End Sub 

    Public Sub New(ByVal displayResourceName As String, ByVal maximumLength As Integer) 
     MyBase.New(maximumLength) 

     _displayResourceName = displayResourceName 

     Me.ErrorMessageResourceName = "ruleExceedMaxCharacter" 
     Me.ErrorMessageResourceType = GetType(My.Resources) 

    End Sub 

    Public Overrides Function FormatErrorMessage(name As String) As String 

     If _displayResourceName <> "" Then 
      name = My.Resources.ResourceManager.GetString(_displayResourceName) 
     End If 

     Return MyBase.FormatErrorMessage(name) 
    End Function 

End Class