Перехват компилятора .Net - PullRequest
2 голосов
/ 19 января 2011

Все мои объекты данных реализуют интерфейс IFillable

Public Interface IFillable
    Sub Fill(ByVal Datareader As Data.IDataReader)
End Interface

В самих объектах вы обычно видите что-то вроде

Public Class Supplier
    Implements IFillable

    Public Sub New()
    End Sub

    Public Sub New(ByVal SupplierID As Guid, ByVal CompanyID As Guid, ByVal Description As String)
        Me._SupplierID = SupplierID
        Me._CompanyID = CompanyID
        Me._Description = Description
    End Sub

    Public Property SupplierID As Guid
    Public Property CompanyID As Guid
    Public Property Description As String

    Public Sub Fill(ByVal Datareader As System.Data.IDataReader) Implements IFillable.Fill
        If Not Datareader.IsClosed Then
            Me._SupplierID = Datareader.GetGuid(Datareader.GetOrdinal("SupplierID"))
            Me._CompanyID = Datareader.GetGuid(Datareader.GetOrdinal("CompanyID"))
            Me._Description = Datareader.GetString(Datareader.GetOrdinal("Description"))
        End If
    End Sub

End Class

Теперь вот немного хитрости. Учитывая, что все мои имена свойств ВСЕГДА совпадают с именами столбцов моей базы данных, я хочу использовать отражение, генерировать метод fill во время компиляции и выводить типы и имена столбцов для устройства чтения данных. .

Я предполагаю, что мне нужно будет структурировать эту функциональность как своего рода плагин инструмента / против? То, что я ищу, - это руководство о том, как лучше всего это сделать.

PS: Кстати: очевидно, я мог бы легко сделать это, используя отражение во время выполнения, но я не хочу брать на себя удар по производительности (хотя теоретически, если бы я мог как-то кэшировать значения (статический класс?), Это могло бы быть не так уж плохо) .

Ответы [ 3 ]

1 голос
/ 25 января 2011

Почему бы вам не использовать простой генератор на этапе «перед сборкой» для создания кода.

Мы создали наш собственный генератор кода, который генерирует уровень данных в коде, когда запускается вручную послеизменение определения базы данных.

0 голосов
/ 25 января 2011

Вы можете посмотреть системы « аспектно-ориентированного программирования » для C #, некоторые из них работают во время компиляции, например,

PostSharp считывает двоичные модули .NET в объектная модель, пусть плагины анализируют и преобразовать его, а затем записывает обратно в MSIL.

Их список здесь , я никогда не использовал ни одного из них в проекте, но думал об этом для таких проблем, как ваша.

Фреймворк для создания исходного кода также является хорошим вариантом и может быть намного легче понять, что происходит.

0 голосов
/ 19 января 2011

Я бы порекомендовал использовать некоторые рамки для генерации кода. Для VB / C # / .NET наиболее очевидный выбор должен быть T4: некоторое введение T4

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...