2009-07-29 7 views
47

Làm thế nào tôi có thể sử dụng phương thức server.mappath trong lớp thư viện lớp C#, hoạt động như BusinessLayer của tôi cho My ASP.NET WEbsiteServer.Mappath trong C# classlibrary

Trả lời

110

Bằng cách gọi nó?

var path = System.Web.HttpContext.Current.Server.MapPath("default.aspx"); 

Đảm bảo bạn thêm tham chiếu vào lắp ráp System.Web.

+0

tôi nên nói rằng assembly system.web không tồn tại trong .net framework 4 – Arash

+12

Giải pháp tồi tệ nhất! Điều gì sẽ xảy ra nếu chúng ta cần sử dụng các lớp Business Layer ngoài ngữ cảnh HTTP? –

+4

Đây là câu trả lời đúng http://stackoverflow.com/questions/12294458/asp-net-mvc-4-use-server-mappath-in-business-layer –

7

Bạn nên tham khảo System.Web và gọi:

HttpContext.Current.Server.MapPath(...) 
4

Có lẽ bạn có thể trừu tượng này như một sự phụ thuộc và tạo ra một IVirtualPathResolver. Bằng cách này, các lớp dịch vụ của bạn sẽ không bị ràng buộc với System.Web và bạn có thể tạo một triển khai khác nếu bạn muốn sử dụng lại logic của mình trong một công nghệ giao diện người dùng khác.

16

Bạn có thể lấy đường dẫn cơ sở bằng cách sử dụng mã sau và nối thêm đường dẫn cần thiết của bạn với mã đó.

string path = System.AppDomain.CurrentDomain.BaseDirectory; 
1

HostingEnvironment.MapPath

System.Web.Hosting.HostingEnvironment.MapPath (path);

0

Kiến trúc, System.web không nên được giới thiệu trong Lớp logic nghiệp vụ (BLL). Sử dụng BLL vào cấu trúc giải pháp để theo nguyên tắc riêng biệt của mối quan tâm để tham khảo System.Web là một thực hành không tốt. BLL không nên tải/chạy trong ngữ cảnh Asp.net. Vì lý do bạn nên xem xét việc sử dụng System.AppDomain.CurrentDomain.BaseDirectory thay vì System.Web.HttpContext.Current.Server.MapPath