Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何避免在ASP.NET核心控制器中重新加载资源_C#_Asp.net Core - Fatal编程技术网

C# 如何避免在ASP.NET核心控制器中重新加载资源

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

我是ASP.net核心的新手。使用EntityFramework core将web API连接到数据库。控制器接收请求,进行一些分析,然后发送响应,如下所示

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表示只创建一个实例。该实例在所有需要它的组件之间共享。因此,始终使用同一个实例

作用域表示每个作用域创建一个实例。应用程序的每个请求都会创建一个作用域,因此注册为作用域的任何组件都会在每个请求中创建一次

瞬态使用瞬态生存期创建的服务将在每次请求时创建。此生存期最适用于轻量级服务。 ()