2012-09-06 8 views
6

Meine Business-Schicht erstellt Dateien und muss sie im Ordner App_Data meines asp.net mvc 4 Web-Frontend speichern.Verwenden Sie Server.MapPath in Business Layer

Ich könnte Server.MapPath in der Business-Schicht verwenden, um den physischen Pfad des Ordners App_Data zu erhalten. Aber ich möchte eine Referenz auf System.Web in der Business-Schicht vermeiden.

Gibt es andere Möglichkeiten, den Pfad zu App_Data in Business-Schicht zu erhalten?

Antwort

26

Der richtige Weg, um damit umzugehen, ist, dass die Präsentationsschicht den Pfad in die Business-Schicht übergibt.

Um dies anders auszudrücken, besteht der Zweck einer Business-Schicht darin, eine Trennung von Belangen zwischen dem ui und den Geschäftsprozessen zu schaffen. Wenn Sie den Geschäftsprozess dazu zwingen, die ui-Schicht zu kennen, verletzen Sie diese Trennung von Bedenken.

Es gibt eine Reihe von Möglichkeiten, wie Sie damit umgehen können. Sie können den Pfad in die Business-Schicht übergeben, wenn die Business-Schicht erstellt wird, z. B. über die Initialisierung des Konstruktors oder über die Abhängigkeitsinjektion. Oder Sie könnten es an den Methodenaufruf übergeben. Oder Sie können eine Konfigurationsdatei erstellen, die von Ihrer Business-Schicht geladen wird und den Pfad enthält.

Es gibt viele Möglichkeiten, dies zu tun, die die Trennung von Bedenken nicht verletzen.

15

können Sie

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

ich diesen Ansatz mag, eigentlich. Es erzeugt keine Abhängigkeit von ASP.NET und verwendet nur Abhängigkeiten, die für jede .NET-Anwendung üblich sind. Die einzige Sorge ist, dass es die Dinge zu einem gewissen Grad an das Betriebssystem bindet, wenn Sie nicht vorsichtig sind. –

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

Es ist für mich verwenden arbeitet

+0

HostingEnvironment ist Teil von System.Web – Spikolynn