VB.NET Динамический CustomTypeDescriptor - PullRequest
0 голосов
/ 02 октября 2010

Я играю с идеей (никогда не играл с TypeDescriptors раньше), и мне удалось заставить ее работать хорошо.Но меня беспокоят некоторые решения "передовой практики", которые я принял во время своего небольшого эксперимента.

Я использую CustomTypeDescriptor, который получает событие от своих PropertyDescriptors, указывающее, что значения меняются или запрашиваются.

TypeDescriptorProvider генерирует совершенно новый экземпляр CustomTypeDescriptor каждый раз, когда вызывается GetTypeDescriptor, а затем связывает события в CustomTypeDescriptor с объектом экземпляра.

Я не уверен, будет ли генерировать новый CustomTypeDescriptor при каждом вызове GetTypeDescriptor, было бы хорошей идеей (даже если бы мне пришлось, чтобы это работало).Я также не уверен, есть ли какие-либо последствия с привязкой событий непосредственно из CustomTypeDescriptor к объекту экземпляра, особенно если CustomTypeDescriptor является динамическим.

Что вы, ребята, думаете?Пример кода моего провайдера ниже:

Class EntityTypeDescriptionProvider
    Inherits TypeDescriptionProvider

Public Sub New(ByVal parent As TypeDescriptionProvider)
    MyBase.New(parent)
End Sub
Protected Sub New()

End Sub

Public Overrides Function GetTypeDescriptor(ByVal objectType As Type, ByVal instance As Object) As ICustomTypeDescriptor
    Dim _CustomTypeDescriptor As EntityTypeDescriptor

    'Grabbin the base descriptor.
    Dim Descriptor As ICustomTypeDescriptor = MyBase.GetTypeDescriptor(objectType, Nothing)

    'If for...whatever reason the instance is empty, return the default descriptor for the type.
    If instance Is Nothing Then
        Return Descriptor
    End If

    'If the instance doesnt implement the interface I use for Descriptor customization
    '(which should never happen) return the default descriptor for the type.
    If Not Functions.IsImplemented(instance.GetType, GetType(ICustomTypeDescriptorEntity)) Then
        Return Descriptor
    End If

    '
    '
    'some lengthy "customization" based on the state of the instance.
    '
    '

    AddHandler _CustomTypeDescriptor.GetValue, AddressOf CType(instance, ICustomTypeDescriptorEntity).GetValue
    AddHandler _CustomTypeDescriptor.SetValue, AddressOf CType(instance, ICustomTypeDescriptorEntity).SetValue

    Return _CustomTypeDescriptor
End Function
End Class

1 Ответ

0 голосов
/ 13 октября 2010

Я уже некоторое время пользуюсь этим, и он совсем не взорвался.

Обратная связь все еще приветствуется, я отвечаю на это, чтобы положить ее на отдых.

...