0

MVC3を使用していて、同じWebサイトを複数の場所に展開する必要がありますが、特定のコントローラーが無効になっています。無効にするコントローラーは、同じ基本コントローラークラスを共有します。

異なるビルド構成を使用してこれを実行できるはずです。各構成には、有効または無効にするコントローラーのセットを制御するための異なるコンパイラースイッチのセットがあります。

これを達成するための最良の方法を決定するのに苦労しています。誰か助けてもらえますか?おそらく何かOnActionExecuting

ありがとう

4

2 に答える 2

0

アクティブな構成に応じた条件付きコンパイルについて話しているのですか?

プロジェクトのプロパティ->ビルド->条件付きコンパイルシンボルに移動し、文字列定数を追加します

次に、次のようなコードを記述できます。

#if TESTCFGACTIVE
        Console.WriteLine("Test CFG Constant");
#else
        Console.WriteLine("Normal");
#endif
        Console.ReadLine();

これをリリースモードとデバッグモードで実行すると、明らかに異なる出力が生成されます。

これがあなたが求めているものであるかどうかは完全にはわかりませんが、さまざまな環境でのデバッグ/ロギングの無効化や有効化などに、控えめに使用しています。

あなたが話していることのようなものについては、それはアプリの振る舞いに関するものです。私は単純な構成設定を使用してコントローラーをオンまたはオフにします。次に、ビルドスクリプトを使用して、関連する構成ファイルを関連する出力ディレクトリに展開できます。

于 2012-04-13T12:10:15.330 に答える
0

たぶん、カスタムルート制約を作成し、 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);
    }
}
于 2012-04-13T12:42:48.340 に答える