2010-03-04 14 views
1

Mon application Web ASP.NET utilise un fournisseur de ressources personnalisé soutenu par un magasin de données SQL Server. Si je comprends bien, le ressourcement implicite invoque le fournisseur de ressources au moment de la compilation pour déterminer si des expressions de ressources doivent être générées ou non pour la clé de ressource donnée. Par conséquent, mon processus de construction dépend maintenant d'avoir une base de données vivante et à jour contenant les clés de ressources nécessaires.Ressourcement ASP.NET: détection lorsque ResourceProvider est appelé au moment de la compilation par rapport à l'exécution

Cela ne constitue pas nécessairement un problème en soi. Le problème est que l'application se connecte à l'une des nombreuses bases de données comme déterminé par un paramètre querystring (conception terrible, mais malheureusement, je suis coincé avec elle pour l'instant). Évidemment, il n'y a pas de chaîne de requête au moment de la compilation, donc le fournisseur de ressources est incapable d'atteindre la base de données. Est-il possible de déterminer que le fournisseur de ressources (ou plus précisément le code en aval du fournisseur de ressources) a été invoqué lors de la compilation afin que je puisse pointer vers une base de données prédéterminée? Pour l'instant, je suis juste par défaut à base de données spécifique si HttpContext.Current == null. Cela fonctionne bien, mais cette logique doit exister dans la couche d'accès aux données et je déteste absolument l'idée du niveau d'accès aux données référençant System.Web. Y a-t-il une meilleure solution?

+0

Ce serait bien si quelqu'un pouvait fournir une bonne réponse à cette question. J'utilise aussi HttpContext et ça dérange aussi mon DAL. –

Répondre

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; 
    } 
}