電話するのは避けたい
AreaRegistration.RegisterAllAreas()
すべてのスタートアップ ロジックを App_Start フォルダー内の個々のクラスに移動しようとしているためです。しかし、私はこれを機能させることに失敗しました。最初のオプションは、次のようなコードを使用しようとしました。
[assembly: PreApplicationStartMethod(typeof(Startup), "PreInit")]
namespace Foo
{
public class Startup {}
}
PreApplicationStartMethod は System.Web 名前空間から来ています。この場合、領域を登録する呼び出しが早すぎます。
David Ebbo によるこの投稿に基づく 2 番目のアプローチでは、 WebActivator を使用します。
[assembly: WebActivatorEx.PostApplicationStartMethod
(typeof(AreaDemo.AreaConfig), "RegisterAreas")]
namespace AreaDemo
{
public class AreaConfig
{
public static void RegisterAreas()
{
AreaRegistration.RegisterAllAreas();
}
}
}
残念ながら、エラーはスローされませんが、エリアへの移動の試行は失敗します (まるで登録が行われなかったかのように)。
Global.asax からの直接呼び出しではなく、アセンブリ ディレクティブを使用してスタートアップ クラスから ASP.NET MVC 5 に領域を登録する適切な方法は何ですか?
更新 1:これが私の AreaRegistration コードです。
public class AdminAreaRegistration : AreaRegistration
{
public override string AreaName
{
get
{
return "Admin";
}
}
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"Admin_default",
"Admin/{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional },
new string[] { "AreaDemo.Areas.Admin.Controllers" }
);
}
}
何らかの理由でデフォルトは無視されますが、/admin/home/index/0 への移動は機能します。/admin、/admin/home、および /admin/home/index すべて 404。