0

我将如何避免在以下代码中使用所谓的魔术字符串?具体来说: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"

那么解决这个问题的最佳方法是什么?

4

0 回答 0