ASP.NET Resourcing: определяет, когда ResourceProvider вызывается во время компиляции или во время выполнения - PullRequest
1 голос
/ 05 марта 2010

В моем веб-приложении ASP.NET используется пользовательский поставщик ресурсов, поддерживаемый хранилищем данных SQL Server.Насколько я понимаю, неявное распределение ресурсов вызывает поставщика ресурсов во время компиляции, чтобы определить, нужно ли генерировать выражения ресурса для данного ключа ресурса.Следовательно, мой процесс сборки теперь зависит от наличия действующей, обновленной базы данных, содержащей необходимые ключи ресурсов.

Это само по себе не обязательно является проблемой.Проблема заключается в том, что приложение подключается к одной из многих баз данных, что определяется параметром строки запроса (ужасный дизайн, но, к сожалению, я пока застрял с ним).Очевидно, что во время компиляции нет строки запроса, поэтому поставщик ресурсов не может получить доступ к базе данных.Можно ли определить, что поставщик ресурсов (или, более конкретно, код, расположенный ниже по потоку от поставщика ресурсов) был вызван во время компиляции, чтобы я мог указать на предварительно определенную базу данных?

Пока я просто по умолчанию использую определенную базу данных, еслиHttpContext.Current == ноль.Это прекрасно работает, но эта логика должна существовать на уровне доступа к данным, и я абсолютно ненавижу идею уровня доступа к данным, ссылающегося на System.Web.Есть ли лучшее решение?

1 Ответ

0 голосов
/ 10 июня 2013
        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;
    }
}
...