有人可以帮我弄清楚如何一般地实现这个方法吗?编译器抱怨它无法解析 t.Id。这是有道理的,但是,我如何告诉它所有通过的对象都将具有 Id 属性。这是我为 T 定义的接口:
namespace LiveWire.Model
{
public interface ILiveWireModel
{
Guid Id { get; }
}
}
所有存储库的接口:
internal interface ILiveWireRepository<T>
{
ICacheProvider Cache { get; }
string CacheKey { get; }
SqlConnection CreateConnection();
IEnumerable<T> GetData<TD>();
IEnumerable<T> LoadData<TD>();
Dictionary<Guid, T> GetCachedData<TD>();
void ClearCache();
}
还有我的方法:
public IEnumerable<T> GetData<TD>()
where TD : ILiveWireModel
{
var data = GetCachedData<TD>();
if (data == null)
{
data = LoadData<TD>().ToDictionary(t => t.Id);
if (data.Any())
{
Cache.Set(CacheKey, data, 30);
}
}
return data.Values;
}
我把整个班级都包括在这里,我希望能澄清一些事情。
internal abstract class LiveWireRepositoryBase<T> : ILiveWireRepository<T>
{
public ICacheProvider Cache { get; private set; }
public string CacheKey { get; private set; }
internal LiveWireRepositoryBase()
{
Cache = new DefaultCacheProvider();
}
public SqlConnection CreateConnection()
{
return new SqlConnection(
ConfigurationManager
.ConnectionStrings["LiveWire4Database"]
.ConnectionString);
}
public IEnumerable<T> GetData<TD>()
where TD : ILiveWireModel
{
var data = GetCachedData<TD>();
if (data == null)
{
data = LoadData<TD>().ToDictionary(t => t.Id);
if (data.Any())
{
Cache.Set(CacheKey, data, 30);
}
}
return data.Values;
}
public IEnumerable<T> LoadData<TD>()
{
return new List<T>();
}
public Dictionary<Guid, T> GetCachedData<TD>()
{
throw new NotImplementedException();
}
public void ClearCache()
{
throw new NotImplementedException();
}
}
我收到了这个我不明白的错误。我尝试使用显式接口实现,但这最终使我删除了 where 约束。
方法“LiveWire.Data.Repositories.LiveWireRepositoryBase.GetData()”的类型参数“TD”的约束必须匹配接口方法“LiveWire.Data.Repositories.ILiveWireRepository.GetData()”的类型参数“TD”的约束。考虑改用显式接口实现。C:\projects\LiveWire\Solution\LiveWire.Data\Repositories\LiveWireRepositoryBase.cs 32 31 LiveWire.Data