我正在使用MVC3,我需要將同一網站部署到多個位置,但禁用某些控制器。要禁用的控制器共享相同的基本控制器類。通過編譯配置禁用基於編譯器開關的控制器
我想我應該能夠使用不同的構建配置來完成這一點,每個配置都有一組不同的編譯器開關來控制啓用或禁用哪一組控制器。
我無法確定實現此目標的最佳方法。誰能幫忙?也許在OnActionExecuting
?
謝謝
我正在使用MVC3,我需要將同一網站部署到多個位置,但禁用某些控制器。要禁用的控制器共享相同的基本控制器類。通過編譯配置禁用基於編譯器開關的控制器
我想我應該能夠使用不同的構建配置來完成這一點,每個配置都有一組不同的編譯器開關來控制啓用或禁用哪一組控制器。
我無法確定實現此目標的最佳方法。誰能幫忙?也許在OnActionExecuting
?
謝謝
也許是Creating custom route constraint和使用ConditionalAttribute?
東西沿着這些路線:
public class DisabledControllersRouteConstraint : IRouteConstraint
{
IList<string> DisabledControllers = new List<string>();
public DisabledControllersRouteConstraint()
{
DisableConstrollersDebug();
DisableConstrollersRelease();
DisableConstrollersProduction();
}
[Conditional("RELEASE")]
private void DisableConstrollersRelease()
{
DisabledControllers.Add("ControllerDisabledForRelease");
}
[Conditional("PROD")]
private void DisableConstrollersProduction()
{
DisabledControllers.Add("ControllerDisabledForProduction");
}
[Conditional("DEBUG")]
private void DisableConstrollersDebug()
{
DisabledControllers.Add("ControllerDisabledForDebug");
}
public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)
{
var controller = values["controller"];
return !DisabledControllers.Contains(controller);
}
}
您是否在討論根據活動配置的條件編譯?
轉到項目屬性 - >建設 - >條件編譯符號,並添加字符串常量
然後,你可以這樣寫代碼:
#if TESTCFGACTIVE
Console.WriteLine("Test CFG Constant");
#else
Console.WriteLine("Normal");
#endif
Console.ReadLine();
在釋放模式和調試模式下運行,這將產生不同的產出,顯然。
不完全確定這是否是你之後的事情,但我謹慎使用它,例如在不同的環境中禁用和啓用調試/日誌記錄功能。
對於類似於您所談論的內容,更多的是關於應用程序的行爲,我將使用簡單的配置設置打開或關閉控制器。然後,您可以使用構建腳本將相關的配置文件部署到相關的輸出目錄。
是的,我意識到這一點,我的問題是關於如何從其基類禁用控制器,而不是條件編譯如何工作。 – enashnash 2012-04-13 12:54:58
我認爲最好的辦法是在Global.asax中路由 – BigMike 2012-04-13 12:00:05
想法不錯,我沒有想到的是工作! – enashnash 2012-04-13 12:51:25