我正在使用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