2015-04-22 71 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