複合IControllerFactory
実装を作成できます。
public class EntityControllerFactory : IControllerFactory {
private IControllerFactory defaultFactory = new DefaultControllerFactory();
public IController CreateController(RequestContext requestContext, string controllerName) {
if(needsCustomLogic) {
// do your custom logic here and return appropriate result
} else {
return defaultFactory.CreateController(requestContext, controllerName);
}
}
// same for the other methods on IControllerFactory
}
デフォルトでは の値ControllerBuilder.Current.GetControllerFactory()
は のインスタンスであるため、これは機能しますDefaultControllerFactory
。
GetControllerFactory
また、デフォルトのインスタンスを取得してファクトリに渡すことで、ファクトリをより将来性のあるものにすることを検討することもできます (MVC の新しいバージョンが から異なる型を返し始めた場合。可能性は低いですが、発生する可能性があります)。
// in Global.asax
var defaultFactory = ControllerBuilder.Current.GetControllerFactory();
ControllerBuilder.Current.SetFactory(new EntityControllerFactory(defaultFactory));