Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.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# 我可以扩展API控制器来保存数据库上下文的变量吗?_C#_Asp.net_Asp.net Mvc - Fatal编程技术网

C# 我可以扩展API控制器来保存数据库上下文的变量吗?

C# 我可以扩展API控制器来保存数据库上下文的变量吗?,c#,asp.net,asp.net-mvc,C#,Asp.net,Asp.net Mvc,我有很多像这样的课程。他们都有两个共同点。他们声明了一个名为Context的私有变量,并有一个方法来使用它 有没有一种方法可以创建一个可以继承的中间类,该类包含声明变量和dispose方法的代码?我认为这很容易做到,但我不确定如何声明变量和方法。他们应该是私人的吗 public class TypeController : ApiController { private Context db = new Context(); [Route("GetMapData")]

我有很多像这样的课程。他们都有两个共同点。他们声明了一个名为Context的私有变量,并有一个方法来使用它

有没有一种方法可以创建一个可以继承的中间类,该类包含声明变量和dispose方法的代码?我认为这很容易做到,但我不确定如何声明变量和方法。他们应该是私人的吗

public class TypeController : ApiController
{
    private Context db = new Context();

    [Route("GetMapData")]
    public async Task<IHttpActionResult> GetMapData()
    {
        var result = await db.Types
                             .Select(e => new
                             {
                                 Id = e.TypeId,
                                 Name = e.Name
                             })
                             .ToListAsync();
        return Ok(result);
    }

    protected override void Dispose(bool disposing)
    {
        if (disposing)
        {
            db.Dispose();
        }
        base.Dispose(disposing);
    }

}
公共类TypeController:ApicController
{
私有上下文数据库=新上下文();
[路线(“GetMapData”)]
公共异步任务GetMapData()
{
var result=await db.Types
.选择(e=>new
{
Id=e.TypeId,
Name=e.Name
})
.ToListAsync();
返回Ok(结果);
}
受保护的覆盖无效处置(布尔处置)
{
如果(处置)
{
db.Dispose();
}
基地。处置(处置);
}
}

您最好使用依赖项注入

尝试使用依赖项解析器来维护对象的生存时间
您可以从这里开始

您可以创建一个这样做的基类,并将
db
变量声明为
protected

public class BaseController : ApiController
{
    protected Context db = new Context();

    protected override void Dispose(bool disposing)
    {
        if (disposing)
        {
            db.Dispose();
        }

        base.Dispose(disposing);
    }
}

public class TypeController : BaseController
{   
    [Route("GetMapData")]
    public async Task<IHttpActionResult> GetMapData()
    {
        var result = await db.Types
                             .Select(e => new
                             {
                                 Id = e.TypeId,
                                 Name = e.Name
                             })
                             .ToListAsync();
        return Ok(result);
    }  
}
公共类BaseController:ApiController
{
受保护的上下文数据库=新上下文();
受保护的覆盖无效处置(布尔处置)
{
如果(处置)
{
db.Dispose();
}
基地。处置(处置);
}
}
公共类TypeController:BaseController
{   
[路线(“GetMapData”)]
公共异步任务GetMapData()
{
var result=await db.Types
.选择(e=>new
{
Id=e.TypeId,
Name=e.Name
})
.ToListAsync();
返回Ok(结果);
}  
}