0

いくつかのASP.NETMVCコントローラーにロジックを提供するサービスパターンを実装したいと思います。ロジックの結果によっては、コントローラーをリダイレクトしたり、404が見つからない場合や、その他のさまざまな応答を返したりする場合があります。out ActionResultしたがって、コントローラーがこれらの応答を実行するために返すことができるサービスメソッドからパラメーターを受信できるようにする必要があります。

問題は、サービスがを生成する方法が見当たらないことActionResultです。のようなメソッドRedirectToAction()とクラスHttpNotFound()内のメソッドControllerはに設定されているprotected internalため、サービスクラスからアクセスすることはできません。

それらを作ることの背後にある理論的根拠は何protected internalですか?私のサービスは、コントローラーにどのようなアクション結果を返す必要があるかをどのように示すことになっていますか?

私がやりたいことの例は、ユーザーがいくつかの場所で、権限を持っている場合に構成変数を設定できるようにすることです。コントローラコードは次のようになります。

public ActionResult SetVariable(int variableId, int variableValue) {
    ActionResult actionRes;
    _svcVars.SetVariable(variableId, variableValue, out actionRes);
    return actionRes;
}

...そしてサービスコードは次のようになります:

public bool SetVariable(int variableId, int variableValue, out ActionResult actionRes) {
    ConfigRepository repoConfig = new ConfigRepository();
    if (!repoConfig.VariableExists(variableId)) {
        actionRes = HttpNotFound("Could not find config variable");
        return false;
    }

    if (!repoConfig.VariableMayBeChanged(variableId)) {
        actionRes = Redirect("/ChangeForbidden.html");
        return false;
    }

    int variablesListId = repoConfig.SetVariable(variableId, variableValue);
    actionRes = RedirectToAction("ViewVariablesList", new { listId = variablesListId });
    return true;
}
4

1 に答える 1

1

問題は、サービスがActionResultsを生成する方法が見当たらないことです。

.NETの他のオブジェクトと同様に、インスタンスを作成するためにそのコンストラクターを使用できます。

ちょうどそのように:

var values = new RouteValueDictionary(new 
{
    action = "ViewVariablesList",
    listId = variablesListId
});
actionRes = new RedirectToRouteResult(values);

Controllerクラスの対応するメソッドが保護され、内部にある理由に関する限り、フレームワークを設計する人々に対処できる質問です。

于 2013-02-27T10:40:19.213 に答える