1

私の ASP.NET Web アプリは、SQL Server データ ストアに基づくカスタム リソース プロバイダーを利用しています。私が理解しているように、暗黙的なリソース割り当ては、コンパイル時にリソース プロバイダーを呼び出して、指定されたリソース キーに対してリソース式を生成する必要があるかどうかを判断します。その結果、私のビルド プロセスは、必要なリソース キーを含むライブの最新データベースに依存するようになりました。

それ自体は必ずしも問題ではありません。問題は、クエリ文字列パラメーターによって決定される多くのデータベースの 1 つにアプリが接続することです (ひどい設計ですが、残念ながら私は今のところそれで立ち往生しています)。明らかに、コンパイル時にクエリ文字列がないため、リソース プロバイダーはデータベースにアクセスできません。リソース プロバイダー (より具体的には、リソース プロバイダーの下流のコード) がコンパイル中に呼び出されたことを判断して、事前に定義されたデータベースを参照できるようにすることはできますか?

今のところ、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 に答える