I have a base class defined as:
Public MustInherit Class BaseRepository(Of T As Class)
and a class that inherits from this class, defined as:
Public Class CommunicationTypeRepository
Inherits BaseRepository(Of CommunicationType)
For testing purposes I have created a helper method that will use Moq to help fetching some basic data:
Public Shared Function GetRepository(Of TEntity As Class, _
TRepo As BaseRepository(Of TEntity)) _
(ByVal sampleData As IList(Of TEntity)) As TRepo
Dim repoWithFakeBase = New Mock(Of TRepo)()
repoWithFakeBase.Setup(Function(x) x.GetAll()).Returns(sampleData.AsQueryable())
Return repoWithFakeBase.Object
End Function
The GetAll
method is in the BaseRepository
class.
At runtime I get the error:
System.InvalidOperationException : No coercion operator is defined between types 'DomainModel.Concrete.CommunicationTypeRepository' and 'DomainModel.Abstract.BaseRepository`1[T]'.
What's the obvious thing that I'm missing?
Oh and here's the callstack of the error, what supprised me was that the conversion is being done inside the linq namesapce:
System.InvalidOperationException : No coercion operator is defined between types 'DomainModel.Concrete.CommunicationTypeRepository' and 'DomainModel.Abstract.BaseRepository`1[T]'.
at System.Linq.Expressions.Expression.GetUserDefinedCoercionOrThrow(ExpressionType coercionType, Expression expression, Type convertToType)
at System.Linq.Expressions.Expression.Convert(Expression expression, Type type)
at DomainTests.Concrete.CommunicationTypeRepositoryTest.GetRepository[TEntity,TRepo](IList`1 sampleData)
at DomainTests.Concrete.CommunicationTypeRepositoryTest.Correct_Item_Found_When_Searched_By_Code()