Haackedが言ったこととは別に、エリア登録(およびルート)を注文することは非常に可能です。あなたがしなければならないのは、どのような順序であれ、手動で各エリアを登録するだけです。 RegisterAllAreas()を呼び出すのと同じくらい滑らかではありませんが、間違いなく実行可能です。
protected void Application_Start() {
var area1reg = new Area1AreaRegistration();
var area1context = new AreaRegistrationContext(area1reg.AreaName, RouteTable.Routes);
area1reg.RegisterArea(area1context);
var area2reg = new Area2AreaRegistration();
var area2context = new AreaRegistrationContext(area2reg.AreaName, RouteTable.Routes);
area2reg.RegisterArea(area2context);
var area3reg = new Area3AreaRegistration();
var area3context = new AreaRegistrationContext(area3reg.AreaName, RouteTable.Routes);
area3reg.RegisterArea(area3context);
}
別のオプションは、)(RegisterAllAreasのコードを取る、独自のアプリにそれをコピーして、順序を決定するための独自のメカニズムを構築することです。ビルトインメソッドがしているすばらしいキャッシングロジックがすべて必要な場合はコピーするのはかなりコードですが、アプリでもそれが必要ない場合もあります。
AreaUtils.csのGlobal.asaxで
using System;
using System.Web.Mvc;
using System.Web.Routing;
namespace SledgeHammer.Mvc.Site
{
public static class Utils
{
public static void RegisterArea<T>(RouteCollection routes,
object state) where T : AreaRegistration
{
AreaRegistration registration =
(AreaRegistration)Activator.CreateInstance(typeof(T));
AreaRegistrationContext context =
new AreaRegistrationContext(registration.AreaName, routes, state);
string tNamespace = registration.GetType().Namespace;
if (tNamespace != null)
{
context.Namespaces.Add(tNamespace + ".*");
}
registration.RegisterArea(context);
}
}
}
:生成されたエリア登録コードに
Utils.RegisterArea<SystemAreaRegistration>(RouteTable.Routes, null);
Utils.RegisterArea<ClientSitesAreaRegistration>(RouteTable.Routes, null);
//AreaRegistration.RegisterAllAreas(); do not dublicate register areas
ませrequred変更
Hey Phil、説明のために感謝します。 私はエリアから自分の「サイト」を移動させてしまい、現在は「デフォルト/非エリア」セクション(ルートにビューとコントローラがあります)です。私は "あいまいなコントローラ"エラーを避けるために、デフォルトのコントローラに私の名前空間のパラメータを設定しました。 また、サイト領域ルートの管理者を無視するために、制約を^((?! admin)。*)に設定している可能性があります。 mvc 1(非エリア)ルートが潜在的にオーダーに大きく依存しているように見えますが、複雑さはそれほど大きくないことに同意します。 ありがとう! – Jason
ルーティングプロセスは通常、ルールの順序に依存するため、「順序付け」機能が重要になる場合があります。 – twk
地域の登録(そしてそのルート)を任意の順序で注文できる2つのテクニックについては、私の回答を参照してください。 – Eilon