【发布时间】:2021-02-03 14:01:03
【问题描述】:
我目前在我的项目的控制器类的构造函数中调用我的文件 io 类。我注意到每次点击 api 端点时都会重新读取 csv 文件,这并不理想。我应该把这个放在哪里,这样我的 csv 才会在启动时被读取?
namespace API.Controllers
{
[ApiController]
public class CovidDataController : ControllerBase
{
private ReadCSV readCSV;
public CovidDataController()
{
readCSV = new ReadCSV("CovidFileIO/covid19-download.csv");
readCSV.CreateDataObjects(100); // Pass in how many lines to read
}
// This endpoint will return records from the covid data object.
[Route("api/[controller]")] // route is api/CovidData
[HttpGet]
public List<CovidData> GetData()
{
return readCSV.covidDataObjects;
}
}
}
【问题讨论】:
-
为什么不让数据静态化?
-
这是 ASP.NET Core。不是 ASP.NET。您需要创建一个 DI 服务。控制器应该做控制器的事情。加载数据不是控制器的事情,而是数据层的事情。也不要将静态变量放在控制器中。查找 ASP.NET Core 的依赖注入。
-
您有很多选择要考虑。但在我看来,最好的方法是在
ConfigureServices类中的ConfigureServices方法中阅读它。这是在 .Net core 中读取配置文件的常用方法。 -
covidDataObjects 是什么类型?我需要它来向您展示如何将其注入 CovidDataController 构造函数
-
另一种选择是在任何你想要的地方创建一个简单的静态类,并在其中检查你是否已经从 IO 读取数据。无论哪种方式,您都不会丢失数据。