2010-01-26 28 views
8

Mis acciones en el controlador ASP.NET MVC están decoradas con numerosas propiedades similaresHabilitar "modo de depuración" en ASP.NET MVC aplicación mediante el uso de C# directivas

[OutputCache(Duration = 86400, Location = OutputCacheLocation.Client, 
     VaryByParam = "jsPath;ServerHost")] 
    [CompressFilter] 
    public JavaScriptResult GetPendingJavaScript(string jsPath, string serverHost) 

Lo que me gustaría hacer es envuelva esto en algo como #if y #endif, y tenga la configuración de DebugMode en mi archivo web.config. Cuando esta configuración se establezca en verdadero, las propiedades de decoración se deben descartar: quiero habilitar el modo de depuración y en el modo de depuración no debe producirse compresión y almacenamiento en caché.

Así que, esencialmente como sería comentando aquellas propiedades de revestimiento (lo que estoy haciendo en realidad ahora y se hartó de ella):

//[OutputCache(Duration = 86400, Location = OutputCacheLocation.Client, 
    // VaryByParam = "jsPath;ServerHost")] 
    //[CompressFilter] 

Obviamente #if y el trabajo con #endif definido (#define) Símbolos C#, no pude encontrar ningún ejemplo donde esto funcionaría con otros tipos de condición (como valores de web.config, etc.).

ayuda apreció

Respuesta

2

En lugar de esto, me gustaría hacer uso de Web Deployment Projects, y el atributo configSource en el web.config.

Yo dividiría el archivo web.config en dos archivos para cada componente. Por ejemplo, para su salida, la memoria caché se dividiría en outputcache.dev.config y outputcache.live.config. Debe ingresar la fuente de configuración como el archivo de configuración del desarrollador.

Su dev.config básicamente le diría a su aplicación que no desea que se ejecute en caché (enableOutputCache="false").

Luego, cuando ejecuta su proyecto de implementación, puede tener configuraciones para reemplazar las cadenas dev.config con live.config en su lugar.

More discussion on configSource and Web Deployment Projects.

En cuanto a su problema de CompressFilter ... Bueno, simplemente tendría un valor de configuración de aplicación en sus archivos de configuración. Después de dividir los archivos de configuración, tendría appsettings.dev.config y appsettings.live.config. En su dev, que tendría algo como:

<add key="InLiveMode" value="false" /> 

Y en su live.config, sí, lo has adivinado:

<add key="InLiveMode" value="true" /> 

Luego, cuando se utiliza el atributo, puede simplemente contra la configuración de la aplicación InLiveMode.

FYI: Yo preferiría tener algún tipo de facade clase, así que no estoy tratando con cadenas mágicas en el código, pero en aras de la simplicidad, tendría algo así como:

//CompressFilter class 
public override void OnActionExecuting(ActionExecutingContext filterContext) 
{ 
    bool inLiveMode = bool.Parse(ConfigurationManager.AppSettings["InLiveMode"]); 

    if(inLiveMode) 
    { 
    //Do the compression shiznit 
    } 
} 
+0

sí that0s fresco y muy probablemente el camino a seguir, voy a hacerlo de esta manera. – mare

0

este momento , no hay nada en .NET que haga que diferentes partes de tu código compilen en función de lo que hay en un archivo de configuración en tiempo de ejecución.

Cuestiones relacionadas