2010-03-02 6 views
8

he el código siguiente en mi proyecto ASP.NETC# ASP.NET Tema estática segura Lea único campo

public sealed class IoC 
{ 
    private static readonly IDependencyResolver resolver = 
     Service.Get("IDependencyResolver") as IDependencyResolver; 

    static IoC() 
    { 
    } 

    private IoC() 
    { 
    } 

    public static IDependencyResolver Container 
    { 
     get 
     { 
      return resolver; 
     } 
    } 
} 

public static class Service 
{ 
    public static object Get(string serviceName) 
    { 
     // Code to create and return instance... 
    } 
} 

Is IoC.Container va a ser seguro para subprocesos?

Respuesta

1

La inicialización de los campos estáticos es segura para subprocesos: es decir, el tiempo de ejecución .NET garantiza que su campo se inicializará solo una vez en el programa, sin importar cuántos hilos tienen acceso y en qué orden.

Como señala Andrey, el método Service.Get sí mismo debe ser seguro para subprocesos.

+0

Según tengo entendido, se llamará Service.Get una vez por dominio de aplicación para que cada subproceso reciba la misma instancia de resolución ¿es correcto? – Emilian

+1

El campo 'private static readonly IDependencyResolver resolver' se inicializará solo una vez por dominio de aplicación, correcto. Todavía es posible hacer algo inseguro dentro de 'Get', pero supongo que eso no es lo que estás preguntando. –

+0

En Service.Get Estoy leyendo únicamente el tipo de resolución de web.config y uso Activator para obtener una instancia de resolución de ese tipo. Pero mi preocupación fue que cada hilo que procesa mis solicitudes utiliza la misma instancia de resolución. – Emilian

0

IoC se ve bien, pero toda la estructura no será segura para subprocesos si resolver no es seguro para subprocesos. Si desea tener un resolver por subproceso, puede usar el atributo [ThreadStatic]

+0

Quiero que todos los subprocesos utilicen la misma instancia de implementación de resolución – Emilian