1

我的 ASP.NET Web 应用程序利用由 SQL Server 数据存储支持的自定义资源提供程序。据我了解,隐式资源在编译时调用资源提供程序以确定是否需要为给定的资源键生成资源表达式。因此,我的构建过程现在依赖于拥有一个包含必要资源键的实时、最新的数据库。

这本身并不一定是个问题。问题是该应用程序连接到由查询字符串参数确定的众多数据库之一(糟糕的设计,但不幸的是我现在坚持使用它)。显然在编译时没有查询字符串,因此资源提供者无法访问数据库。是否可以确定资源提供者(或更具体地资源提供者下游的代码)在编译期间已被调用,以便我可以指向预定的数据库?

现在,如果 HttpContext.Current == null,我只是默认使用特定的数据库。这很好用,但是这个逻辑必须存在于数据访问层中,我绝对讨厌数据访问层引用 System.Web 的想法。有更好的解决方案吗?

4

1 回答 1

0
        object IResourceProvider.GetObject(string resourceKey, CultureInfo culture)
        {
            if (AspHelpers.ASPNetCompilerExecutionContext)
                return "ASPNetCompilerDesignTimeExecutionContext";

在哪里

public static bool ASPNetCompilerExecutionContext
{
    get
    {
        string entryMethod = (new StackTrace()).GetFrame((new StackTrace()).FrameCount - 1).GetMethod().Name;
        if (entryMethod == "PrecompileApp")
            return true;
        else
            return false;
    }
}
于 2013-06-10T07:47:50.220 回答