2010-11-24 12 views
6

Tengo un método para generar URL completas que he escrito y que me gustaría tener como estático, por lo que es fácil llamar desde modelos según sea necesario.seguridad de la hebra C# al hacer referencia a las propiedades estáticas en otras clases

Todavía estoy teniendo problemas, sin embargo, con la posibilidad de decidir si su hilo es seguro o no.

Aquí está el código.

public string GenerateURLFromModel(string action, string controller) 
    { 
     HttpContextWrapper wrapper = new HttpContextWrapper(HttpContext.Current); 
     Uri url = HttpContext.Current.Request.Url; 
     UrlHelper urlHelper = new UrlHelper(new RequestContext(wrapper, RouteTable.Routes.GetRouteData(wrapper))); 

     return url.AbsoluteUri.Replace(url.PathAndQuery, urlHelper.Action(action, controller)); 
    } 

lo que ya sé es:

1) Las dos cadenas pasadas en el serán hilo de seguridad, ya que son los tipos de referencia inmutables.

2) Todos los objetos instanciados dentro de un método estático se pueden considerar seguros para subprocesos ya que solo existen en la pila para ese subproceso específico.

Lo que estoy seguro es de:

1) ¿De qué manera el uso de HttpContext.Current y RouteTable.Routes jugar en este método? Ambas son propiedades estáticas que paso a los constructores.

Mis preguntas son:

1) ¿Cuáles son las implicaciones del uso de estas propiedades estáticas?

2) ¿El resto de mi comprensión de la seguridad de este método suena cierto?

3) ¿Qué reglas puedo tener en cuenta en el futuro para ayudar a determinar la seguridad del hilo en situaciones como esta?

Respuesta

2

Siempre y cuando no modifique el estado compartido, o acceda al estado que es probable que sea modificado por otros hilos, entonces está bien.

En este caso HttpContext.Current es local al hilo actual de todos modos, por lo que no es un problema; y RouteTable.Routes solo debe modificarse en el evento de inicio de su aplicación, por lo que también debería estar bien.

Cuestiones relacionadas