カスタムコントローラーファクトリーがあります(私の質問に関連する非常に基本的な実装です):
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
います (つまり、上記のように競合が発生した場合は、非領域コントローラーの代わりに領域コントローラーを使用します)。エリアに一致するコントローラーが含まれていない場合は、エリアにないコントローラーにフォールバックします。