使用统一PerRequestLifetimeManager处理dbcontext的方式和位置

时间:2017-03-30 15:30:53

标签: c# entity-framework asp.net-web-api unity-container

我正在使用unity IOC将dbcontext注入Web API的相关类中。我正在使用自定义生命周期管理器,如下所示:

public class PerRequestLifetimeManager : LifetimeManager 
{
    private readonly object key = new object();

    public override object GetValue()
    {
        if (HttpContext.Current != null &&
            HttpContext.Current.Items.Contains(key))
            return HttpContext.Current.Items[key];
        else
            return null;
    }

    public override void RemoveValue()
    {
        if (HttpContext.Current != null)
            HttpContext.Current.Items.Remove(key);
    }

    public override void SetValue(object newValue)
    {
        if (HttpContext.Current != null)
            HttpContext.Current.Items[key] = newValue;
    }
}

这是在global.asax中注入的:

// context - 每个http请求一个上下文             container.RegisterType(new PerRequestLifetimeManager());

在dbcontext类中,我们有:

public class BudgetControlDbContext : DbContext, IBudgetControlDbContext
{
    protected override void Dispose(bool disposing)
    {
        base.Dispose(disposing);
        this._isDisposed = true;
    }

    public bool IsDisposed
    {
        get { return this._isDisposed; }
    }
}

问题: 现在如何处理dbcontext以及该代码应该在哪里?

0 个答案:

没有答案