2010-01-26 17 views
8

hành động của tôi trong bộ điều khiển ASP.NET MVC được trang trí với rất nhiều đặc tính như thế nàyEnable "Debug mode" trong ứng dụng ASP.NET MVC thông qua việc sử dụng các chỉ thị C#

[OutputCache(Duration = 86400, Location = OutputCacheLocation.Client, 
     VaryByParam = "jsPath;ServerHost")] 
    [CompressFilter] 
    public JavaScriptResult GetPendingJavaScript(string jsPath, string serverHost) 

Những gì tôi muốn làm là bọc cái này vào thứ gì đó như #if và #endif, và có cài đặt DebugMode trong tệp web.config của tôi. Khi cài đặt này được đặt thành true, các thuộc tính trang trí sẽ bị bỏ qua - Tôi muốn bật chế độ gỡ lỗi và trong chế độ gỡ lỗi, không nén và lưu vào bộ nhớ cache sẽ xảy ra.

Vì vậy, về cơ bản nó sẽ như thế nào cho ý kiến ​​ra những tính chất trang trí (những gì tôi đang thực sự làm gì bây giờ và đã chán với nó):

//[OutputCache(Duration = 86400, Location = OutputCacheLocation.Client, 
    // VaryByParam = "jsPath;ServerHost")] 
    //[CompressFilter] 

Rõ ràng # if và làm việC#endif với định nghĩa (#define) C# biểu tượng, tôi không thể tìm thấy bất kỳ ví dụ nơi này sẽ làm việc với các loại điều kiện (như giá trị web.config, vv).

Trợ giúp đánh giá cao

Trả lời

2

Thay vì điều này, tôi sẽ tận dụng Web Deployment Projects, và configSource thuộc tính trong web.config.

Tôi sẽ chia web.config thành hai tệp cho mỗi thành phần. Ví dụ: đối với bộ nhớ cache đầu ra của bạn sẽ được chia thành outputcache.dev.configoutputcache.live.config. Bạn nên nhập nguồn cấu hình như là tập tin cấu hình dev.

dev.config của bạn về cơ bản sẽ cho ứng dụng của bạn biết rằng bạn không muốn bộ nhớ cache đang chạy (enableOutputCache="false").

Sau đó, khi bạn chạy dự án triển khai của mình, bạn có thể có cài đặt để thay thế chuỗi dev.config bằng live.config thay thế.

More discussion on configSource and Web Deployment Projects.

Đối với vấn đề CompressFilter của bạn ... Vâng, tôi chỉ đơn giản có giá trị cài đặt ứng dụng trong tệp cấu hình của bạn. Sau khi tách các tệp cấu hình, bạn sẽ có appsettings.dev.configappsettings.live.config. Trong dev của bạn, bạn sẽ có một cái gì đó như:

<add key="InLiveMode" value="false" /> 

Và trong live.config của bạn, vâng, bạn đã đoán nó:

<add key="InLiveMode" value="true" /> 

Sau đó, khi bạn sử dụng thuộc tính, bạn có thể chỉ đơn giản là chống lại cài đặt ứng dụng InLiveMode.

FYI: Tôi rất thích có một số loại facade lớp vì vậy tôi không phải đối phó với chuỗi phép thuật trong các mã, nhưng vì lợi ích của sự đơn giản, bạn sẽ có một cái gì đó như:

//CompressFilter class 
public override void OnActionExecuting(ActionExecutingContext filterContext) 
{ 
    bool inLiveMode = bool.Parse(ConfigurationManager.AppSettings["InLiveMode"]); 

    if(inLiveMode) 
    { 
    //Do the compression shiznit 
    } 
} 
+0

yeah that0s cool và rất có thể là cách để đi, tôi sẽ làm như thế này. – mare

0

Xin lỗi , không có gì trong .NET sẽ khiến các phần khác nhau của mã của bạn biên dịch dựa trên những gì trong tệp cấu hình khi chạy.

Các vấn đề liên quan