我正在尝试为Caching类创建一个接口,如下所示:
public interface IDataCacheMember
{
private List<T> _data;
public List<T> Data;
private void RefreshCache();
private List<T> GetData();
}
public class StateMap : IDataCacheMember
{
private List<States> _data;
public List<States> Data
{
get
{
if (_data == null || _data.Count() < 1)
_data = GetData();
return _data;
}
}
private void RefreshCache()
{
_data = GetData();
}
private List<States> GetData()
{
//API Magic to get states
}
private static readonly Lazy<StateMap> lazy =
new Lazy<StateMap>(() => new StateMap());
public static StateMap Instance { get { return lazy.Value; } }
private StateMap()
{
//Set a timer to call RefreshCache() every five minutes
}
}
目标是在网站的许多小数据集上保存对API的调用。这些数据集不需要在一分钟内准确。
没有空间使用适当的缓存服务(Redis等)。
问题是我找不到为_data
和Data
的返回类型定义通用列表的方法。
实现目标的最佳方法是什么?我可以使用_data
和Data
的通用返回类型,还是我应该使用的其他模式更优秀呢?
答案 0 :(得分:4)
如果您使接口本身通用,则可以在接口上拥有通用属性:
public interface IDataCacheMember<T>
{
List<T> Data { get; }
}
并将其与类型参数一起使用:
public class StateMap : IDataCacheMember<States>
{
// ...
}
注意:您不能在界面上拥有私人会员。这没有意义,因为界面只描述了外向合同。您可能希望使用抽象类。
答案 1 :(得分:1)
你必须使界面本身通用:
public interface IDataCacheMember<T>
{
List<T> Data { get; set; }
}
此外,界面不能拥有私人会员。
答案 2 :(得分:0)
你的代码将无法编译,这总是一个坏兆头:)
您的缓存有两个重要问题:
正如Scott Chamberlain建议的那样,请查看MemoryCache
课程。