2012-09-06 17 views
6

Mi capa empresarial crea archivos y debe guardarlos en la carpeta App_Data de mi asp.net mvc 4 web frontend.Usar Server.MapPath en Business Layer

Podría usar Server.MapPath en la capa empresarial para obtener la ruta física de la carpeta App_Data. Pero quiero evitar una referencia a System.Web en la capa de negocios.

¿Hay otras formas de obtener la ruta App_Data en la capa empresarial?

Respuesta

26

La forma correcta de resolver esto es hacer que la capa de presentación pase la ruta a la capa empresarial.

Para decirlo de otra manera, el propósito de tener una capa de negocios es crear una separación de preocupaciones entre la ui y los procesos de negocio. Si fuerza al proceso de negocio a conocer la capa de la interfaz de usuario, está violando esa separación de preocupaciones.

Hay varias maneras de lidiar con esto. Podría pasar la ruta de acceso a la capa empresarial cuando se construye la capa de negocio, como a través de la inicialización del constructor o mediante la inyección de dependencia. O puede pasarlo a la llamada de método. O puede crear alguna forma de archivo de configuración que carga su capa empresarial que contiene la ruta.

Hay muchas maneras de hacerlo que no violan la separación de preocupaciones.

15

puede utilizar

string path = System.AppDomain.CurrentDomain.BaseDirectory+"App_Data"; 
+1

me gusta este enfoque, en realidad. No crea ninguna dependencia en ASP.NET, y solo usa dependencias que son comunes a cualquier aplicación .NET. La única preocupación es que relaciona las cosas con el sistema operativo hasta cierto punto si no tienes cuidado. –

5
string path = HostingEnvironment.MapPath("~\\App_Data"); 

Funciona para mí

+0

HostingEnvironment es parte de System.Web – Spikolynn