优化BaseControllerWithDataContext以避免魔术字符串

时间:2016-11-20 14:41:22

标签: c# asp.net-mvc-5 datacontext magic-string

我如何避免在以下代码中使用所谓的魔术字符串? 特别是:System.Web.HttpContext.Current.Items["DomainDataContext"]

这个类基本上在Controller中实现了一个DataContext。此类是类库的一部分,不能直接访问DataContext类(即.dbml文件)

public abstract class BaseControllerWithDataContext<TDataContext> : BaseController where TDataContext : DataContext, new()
{
    public static TDataContext CurrentContext
    {
        get
        {
            if (System.Web.HttpContext.Current.Items["DomainDataContext"] == null)
            {
                TDataContext context = new TDataContext();
                System.Web.HttpContext.Current.Items["DomainDataContext"] = context;
            }
            return (TDataContext) System.Web.HttpContext.Current.Items["DomainDataContext"];
        }
    }

    protected TDataContext DataContext
    {
        get { return CurrentContext; }
    }

    protected override void OnActionExecuted(ActionExecutedContext filteContext)
    {
        if (System.Web.HttpContext.Current.Items["DomainDataContext"] == null)
        {
            return;
        }

        var context = (TDataContext) System.Web.HttpContext.Current.Items["DomainDataContext"];

        context.Dispose();
    }
}

我尝试使用另一个泛型类型参数,但遇到了"cannot use sealed class 'System.String' as type parameter constraint"

的问题

那么最好的方法是什么?

0 个答案:

没有答案