1

カスタムコントローラーファクトリーがあります(私の質問に関連する非常に基本的な実装です):

public class MyControllerFactory : DefaultControllerFactory
{
    public override IController CreateController(RequestContext requestContext, string controllerName)
    {    
        var controller = base.CreateController(requestContext, controllerName);

        return controller;
    }

    protected override System.Web.SessionState.SessionStateBehavior GetControllerSessionBehavior(RequestContext requestContext, Type controllerType)
    {
        return base.GetControllerSessionBehavior(requestContext, controllerType);
    }
}

これは次のように登録されていglobal.asaxます:

protected void Application_Start()
{
    ControllerBuilder.Current.SetControllerFactory(typeof(MyControllerFactory));

    // other code here
}

このコントローラー ファクトリに設定されたブレークポイントは、コントローラーの解決に競合がない場合 (たとえば、解決プロセスでコントローラーが 1 つしか見つからない場合) に適切にヒットします。ただし、ルートで名前空間の制約を使用せずに同じ名前のコントローラーが 2 つある場合 (私の場合: 1 つはエリア内にあり、もう 1 つはエリア内にありません)、コントローラーはヒットせず、DefaultControllerFactory引き継ぎ、スローします(予想される) 例外。


私の質問

MyControllerFactory正しく登録できていますか?上記で概説したケースで使用されていない他の理由はありますか?


私がやろうとしていること

(構成で指定された) 領域で定義されているコントローラーを自動的に使用する を作成しようとしてControllerFactoryいます (つまり、上記のように競合が発生した場合は、非領域コントローラーの代わりに領域コントローラーを使用します)。エリアに一致するコントローラーが含まれていない場合は、エリアにないコントローラーにフォールバックします。

4

1 に答える 1