我有一个功能,可以在一个类中设置2个列表来从第三方提取 我把它放在一个功能中,因为去第三方需要时间,我只想为这个页面做一次。 这是我的班级:
public class MyClass
{
public IEnumerable<dynamic> ListOne { get; set; }
public IEnumerable<dynamic> ListTwo { get; set; }
}
这是我的功能设置&amp;返回列表
public MyClass GetLists()
{
//Here I have the code that connects to the third party etc
//Here set the items.. from the third party
MyClass _MyClass = new MyClass();
_MyClass.ListOne = ThirdParty.ListOne;
_MyClass.ListTwo = ThirdParty.ListTwo;
return (_MyClass);
};
}
所以,现在在我的Web API中,我有2个函数 - 一个返回每个列表的函数。
[Route("ListOne")]
public IHttpActionResult GetListOne()
{
IEnumerable<dynamic> ListOne = GetLists().ListOne;
return Json(ListOne);
}
[Route("ListTwo")]
public IHttpActionResult GetListTwo()
{
IEnumerable<dynamic> ListTwo = GetLists().ListTwo;
return Json(ListTwo);
}
我的问题是每次调用webApi getListone或getListTwo时,该函数将再次运行并调用第三方。我怎么能阻止这个?
谢谢!
答案 0 :(得分:1)
将数据检索逻辑放在属性中并延迟加载数据,即在第一次调用属性时加载它。
private IEnumerable<dynamic> _listOne;
public IEnumerable<dynamic> ListOne {
get {
if (_listOne == null) {
// Retrieve the data here. Of course you can just call a method of a
// more complex logic that you have implemented somewhere else here.
_listOne = ThirdParty.ListOne ?? Enumerable.Empty<dynamic>();
}
return _listOne;
}
}
?? Enumerable.Empty<T>()
确保永远不会返回null。而是返回一个空的枚举。
请参阅:?? Operator (C# Reference)和
Enumerable.Empty Method ()
还要查看Lazy<T> Class。