Шаблон репозитория реализует методы путем добавления Add1, но должен использовать методы базового класса - PullRequest
1 голос
/ 29 августа 2011

Это оригинальный код в c #

public class CategoryRepository: RepositoryBase<Category>, ICategoryRepository
    {
    public CategoryRepository(IDatabaseFactory databaseFactory)
        : base(databaseFactory)
        {
        }           
    }
public interface ICategoryRepository : IRepository<Category>
{
}

И мне пришлось изменить его в VB.Net и изменить его на мою текущую ситуацию (другой объект, но принципал тот же), такэто стало так:

Public Class UserRepository
    Inherits RepositoryBase(Of Domain.Master.User)
    'Implements IUserRepository

    Public Sub New(databaseFactory As IDatabaseFactory)
        MyBase.New(databaseFactory)
    End Sub
End Class


Public Interface IUserRepository
    Inherits IRepository(Of User)

End Interface

Проблема в том, что он все еще должен реализовать IUserRepository, что невозможно, потому что мне пришлось бы переписать свой код, так как он хочет добавить методы (добавить, удалить..., которые уже реализованы в RepositoryBase)

Это мой базовый класс, где проблема может быть

Public MustInherit Class RepositoryBase(Of T As Class)

    Private m_masterContext As MyMasterContext
    Private ReadOnly dbset As IDbSet(Of T)

    Protected Sub New(databaseFactory__1 As IDatabaseFactory)
        DatabaseFactory = databaseFactory__1
        dbset = DataContext.[Set](Of T)()
    End Sub

    Protected Property DatabaseFactory() As IDatabaseFactory
        Get
            Return m_DatabaseFactory
        End Get
        Private Set(value As IDatabaseFactory)
            m_DatabaseFactory = value
        End Set
    End Property
    Private m_DatabaseFactory As IDatabaseFactory

    Protected ReadOnly Property DataContext() As MyMasterContext
        Get
            Return If(m_masterContext, (InlineAssignHelper(m_masterContext, DatabaseFactory.[Get]())))
        End Get
    End Property
    Public Overloads Sub Add(entity As T)
        dbset.Add(entity)
    End Sub
    Public Overridable Sub Update(entity As T)
        dbset.Attach(entity)
        m_masterContext.Entry(entity).State = EntityState.Modified
    End Sub
    Public Overridable Sub Delete(entity As T)
        dbset.Remove(entity)
    End Sub
    Public Overridable Sub Delete(where As Expression(Of Func(Of T, Boolean)))
        ' Dim objects As IEnumerable(Of T) = dbset.Where(Of T)(where).AsEnumerable()
        'For Each obj As T In objects
        '    dbset.Remove(obj)
        'Next
    End Sub
    Public Overridable Function GetById(id As Long) As T
        Return dbset.Find(id)
    End Function
    Public Overridable Function GetById(id As String) As T
        Return dbset.Find(id)
    End Function
    Public Overridable Function GetAll() As IEnumerable(Of T)
        Return dbset.ToList()
    End Function
    Public Overridable Function GetMany(where As Expression(Of Func(Of T, Boolean))) As IEnumerable(Of T)
        Return dbset.Where(where).ToList()
    End Function
    Public Function [Get](where As Expression(Of Func(Of T, Boolean))) As T
        Return Nothing ' dbset.Where(where).FirstOrDefault(Of T)()
    End Function
    Private Shared Function InlineAssignHelper(Of T)(ByRef target As T, value As T) As T
        target = value
        Return value
    End Function
End Class

Кто-нибудь есть идеи, что я должен изменить, чтобы позволить емуработать и позволить моему UserRepository использовать методы в RepositoryBase при реализации IUserRepository?

Заранее спасибо

1 Ответ

0 голосов
/ 29 августа 2011

VB.Net не имеет прямого приведения, в отличие от c #

. Лучший способ - воссоздать все методы и всегда вызывать mybase.method

Например:

   Public Overrides Sub Update(entity As Domain.Slave.Klant) Implements Infrastructure.IRepository(Of Domain.Slave.Klant).Update
        MyBase.Update(entity)
    End Sub

Итак, это не требуется в C #, но это в VB.Net:)

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