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

时间:2014-06-25 07:05:29

标签: c# asp.net asp.net-mvc

我有很多像这样的课程。他们都有两个共同点。他们声明了一个名为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);
    }

}

2 个答案:

答案 0 :(得分:2)

您最好使用依赖注入。

尝试使用一些依赖项解析器来维护对象的生命周期 你可以从这里开始http://www.asp.net/web-api/overview/extensibility/using-the-web-api-dependency-resolver

答案 1 :(得分:0)

您可以创建一个基类,并将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);
    }  
}