2010-09-28 14 views
10

Tengo un método de extensión que usa algunas configuraciones. Los he declarado como static.Vida útil de variables estáticas en .NET

public static class Extensions 
{ 
    static string _mailServer = ConfigurationManager.AppSettings["MailServer"]; 
    // ... etc  

    public static void SendEmailConfirmation(this IOrder order) { } 
} 

Solo quería comprobar que esto está haciendo lo que pretendo, ya que no estoy 100% seguro. La idea es que no quiero tener que seguir leyendo estos valores, me gustaría que se leyeran una vez y se almacenaran en caché durante toda la vida de la aplicación web. ¿Es esto lo que sucederá? Gracias

+1

No leería desde una configuración en un método de extensión. Su método de extensión debería funcionar para todos los IOrders, pero su único trabajo para IOrders en una aplicación que está configurada correctamente. –

+0

Hmmm, no podría pensar en qué otra cosa hacerlo. El servicio de notificación no es realmente parte del modelo de dominio, es decir, el envío de un correo electrónico no debe ser responsabilidad del IOrder (que básicamente solo contiene los datos del pedido). Así que escribí extensiones que son llamadas desde mi controlador cuando quiero enviar una notificación de un cambio en el estado del pedido. ¿Crees que eso tiene sentido? ¿O habría una mejor manera? – fearofawhackplanet

+0

El envío de correo electrónico suele ser una preocupación transversal en una empresa. Crearía un servicio cuyo único propósito es enviar correos electrónicos. Puede tener métodos específicos para correos electrónicos específicos que envíe, pero definitivamente aislaré la parte de envío de correo electrónico de su aplicación. –

Respuesta

15

(actualiza con la aclaración de Keiths que no se leen hasta que se usaron primero)

Ellos serán leídos la primera vez que se utilizan y, a continuación, conservan hasta el dominio de aplicación se detiene o se recicla, que es probablemente lo usted quiere.

Es decir, las aplicaciones ASP.NET se ejecutan dentro de un Dominio de aplicación. Así es como residen y están disponibles para múltiples solicitudes sin tener que iniciarse para cada solicitud individual. Puede configurar cuánto tiempo vivirán y cuándo reciclarán, etc. Las variables estáticas vivirán y morirán con la aplicación y, por lo tanto, sobrevivirán siempre que la aplicación sea residente en el dominio de la aplicación.

+0

genial, gracias. (los puntos de representante más fáciles jamás para ti :)) – fearofawhackplanet

+3

Sí, hasta que una docena de personas accedan para aclarar todos los casos extremos en los que esto no es 100% cierto ...;) –

+3

Básicamente esto. Más específicamente, la estática se evalúa perezosamente cuando se necesitan por primera vez. Esto ahorra los costos iniciales de inicializar un montón de statics por adelantado. Por lo tanto, la primera vez que ejecute SendEmailConfirmation(), accederá a la configuración de la aplicación y la conservará mientras dure el dominio de la aplicación (que se ejecutará hasta que se restablezca el grupo de aplicaciones o IIS; el primero sucede de vez en cuando). , el otro sucede por elección del usuario o en un reinicio del servidor) – KeithS

1

_mailServer se inicializarán la primera vez que se use la clase Extensiones (de cualquier forma). No se volverá a configurar hasta que se vuelva a cargar el dominio de la aplicación.

1

Se cargarán la primera vez que se necesiten y se mantendrán en la memoria hasta que IIS recicle la aplicación.