RegisterProperty 缓存显示名称

RegisterProperty cache display name

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

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

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

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