我的ASP.NET Web应用程序使用由SQL Server数据存储支持的自定义资源提供程序。据我了解,隐式资源在编译时调用资源提供程序来确定是否需要为给定的resourcekey生成资源表达式。因此,我的构建过程现在依赖于拥有包含必要资源键的实时,最新数据库。
这本身并不一定是个问题。问题是应用程序连接到许多数据库中的一个,这是由查询字符串参数决定的(可怕的设计,但不幸的是我暂时坚持使用它)。显然在编译时没有查询字符串,因此资源提供程序无法访问数据库。是否可以确定在编译期间是否已调用资源提供程序(或更具体地说是资源提供程序下游的代码),因此我可以指向预定的数据库?
现在我只是默认为特定数据库,如果HttpContext.Current == null。这工作正常,但这个逻辑必须存在于数据访问层中,我绝对讨厌引用System.Web的数据访问层的想法。有更好的解决方案吗?
答案 0 :(得分: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;
}
}