C# 如何避免在ASP.NET核心控制器中重新加载资源
我是ASP.net核心的新手。使用EntityFramework core将web API连接到数据库。控制器接收请求,进行一些分析,然后发送响应,如下所示C# 如何避免在ASP.NET核心控制器中重新加载资源,c#,asp.net-core,C#,Asp.net Core,我是ASP.net核心的新手。使用EntityFramework core将web API连接到数据库。控制器接收请求,进行一些分析,然后发送响应,如下所示 public class CentoDataController : ControllerBase { private readonly CentoWebDBContext _context; private HPOSubSimHolder _hpoSubSimHolder; public CentoDataCon
public class CentoDataController : ControllerBase
{
private readonly CentoWebDBContext _context;
private HPOSubSimHolder _hpoSubSimHolder;
public CentoDataController(CentoWebDBContext context)
{
_context = context;
_hpoSubSimHolder = new HPOSubSimHolder(hpofile);
}
[HttpGet("{id}")]
public ActionResult<CentoData> GetCentoData(string id)
{
IQueryable<CentoData> r = AnalysisMethod(id, _hpoSubSimHolder);
return r;
}
公共类CentoDataController:ControllerBase
{
私有只读CentowebbContext\u上下文;
私人HPOSUBSIM持有人_HPOSUBSIM持有人;
公共CentoDataController(CentoweBbcontext上下文)
{
_上下文=上下文;
_HPOSUBSIM HOLDER=新的HPOSUBSIM HOLDER(hpofile);
}
[HttpGet(“{id}”)]
公共操作结果GetCentoData(字符串id)
{
IQueryable r=分析方法(id,hpoSubSimHolder);
返回r;
}
代码可以工作,但是一旦新请求进入,将重新加载_hpoSubSimHolder。我想我不应该在请求之间共享控制器。但是如何避免重新加载_hpoSubSimHolder?控制器总是针对每个请求进行实例化。要控制控制器应该使用的任何资源或依赖项的生存期,可以使用内置依赖注入(DI) 大多数示例在startup.cs
ConfigureServices
方法中设置DI。
DI容器允许3种不同的生存期状态,在您的情况下,我想您可以尝试将HPOSubSimHolder
添加为singleton
我不知道什么是HPOSubSimHolder
,也不知道实现细节是什么,因此很难说这是否适用于您。
但这将是设置此功能的“正常”方式;)我可以看出您正在使用.net核心依赖项注入 如果您希望在请求之间共享该服务,请考虑将其作为一种服务 注册依赖项时,可以在
AddScoped
、AddTransient
和AddSingleton
之间进行选择
在startup.cs类中:
public void ConfigureServices(IServiceCollection services)
{
// some code
services.AddSingleton<HPOSubSimHolder>(new HPOSubSimHolder());
}
public void配置服务(IServiceCollection服务)
{
//一些代码
AddSingleton(新的HPOSubSimHolder());
}
Singleton表示只创建一个实例。该实例在所有需要它的组件之间共享。因此,始终使用同一个实例
作用域表示每个作用域创建一个实例。应用程序的每个请求都会创建一个作用域,因此注册为作用域的任何组件都会在每个请求中创建一次
瞬态使用瞬态生存期创建的服务将在每次请求时创建。此生存期最适用于轻量级服务。
()