尝试实施此目的:
接口:
public interface IStoreReader
{
Task<IEnumerable<T>> Get<T>(UserDb user);
}
实现:
public async Task<IEnumerable<ConversationDb>> Get<ConversationDb>(UserDb user)
{
return await _convoRepo.Get(user.UserId); // error here
}
Convo回购:
public async Task<IEnumerable<ConversationDb>> Get(string userId)
{
return await // get from db - this works fine
}
答案 0 :(得分:2)
当您在方法上定义泛型类型时,当您实现它时,您给出的名称将只是一个泛型类型。因此,它说你的回购中的具体类与恰好具有相同名称的通用类不同。我相信你实际上想要在你的界面上定义泛型类型。
public interface IStoreReader<T>
{
Task<IEnumerable<T>> Get(UserDb user);
}
public class ConversationReader : IStorReader<ConversationDb>
{
public async Task<IEnumerable<ConversationDb>> Get(UserDb user)
{
return await _convoRepo.Get(user.UserId);
}
}
答案 1 :(得分:0)
我认为在两个不同的命名空间中有两个名为ConversationDb
的类。
repo返回的类型与实现中定义的类型不同。看看类型的定义,你会发现它们来自不同的地方。
错误信息非常清楚。您要求编译器强制转换:
System.Collections.Generic.IEnumerable<SomeNamespace.ConversationDb>
到
System.Collections.Generic.IEnumerable<ConversationDb>
您必须为第二种情况导入名称空间,但是repo正在返回第一种情况。