2016-05-19 11 views
0

私は、複数のMVCプロジェクトで動作するフレームワークを作成しようとしています。それぞれのプロジェクトをエリアとして追加したいと思います。 私はこのように私のコード領域をシミュレートしてみて、各プロジェクトでAreaRegistrationを使用することはできません。Mvc、AreaRegistrationを使わずにオンザフライで登録する

foreach (var module in InstalledModules) 
{ 
    routeCollection.MapRoute(
     name: "Default_" + module.AreaName, 
     url: module.AreaName + "/{controller}/{action}/{id}", 
     defaults: new { action = "Index", id = UrlParameter.Optional }, 
     namespaces: new[] { module.Namespace } 
    ); 
} 

InstalledModulesModule1MvcProject.Module1などのモジュールアセンブリのルート名前空間のような地域名を含むすべてのモジュールのリストです。上記のコードMapRouteはすべてインストールされたモジュールですが、動作しません。すべてのリクエストに対して、最初に登録された経路ヒットとMVCが間違ったアセンブリ(場所)でコントローラを検索しようとしました。

オンザフライでエリアとしてプロジェクトアセンブリを登録する方法はありますか?私は検索に一致するルートの方法をカスタマイズするにはどうすればよい

それとも

答えて

1

Controllersを名前空間に指定しましたか? InstalledModulesリストは次のようにする必要があります。

var InstalledModules = new List<InstalledModule> 
{ 
    new InstalledModule() { AreaName = "Main", Namespace ="MainWeb.Controllers"}, 
    new InstalledModule() { AreaName = "Web1", Namespace = "WebApplication1.Controllers"}, 
    new InstalledModule() { AreaName = "Web2", Namespace = "WebApplication2.Controllers"}, 
}; 
+0

はい、動作しません。 – Fred

+0

上記のコードで試したところ、/ Main/Home、/ Web1/Home、/ Web2/Homeに正常にルーティングされました。 問題はコントローラが/ Mainのビューを常にロードすることです(MainWebはスタートアッププロジェクトです)。 私はWeb1/Views、Web2/ViewsからMainWeb/Viewsにビューを移動します。 – Ken2009

+0

はい、そうです。私は自分の問題を見つけました。ルートコレクションには常にデフォルトルートが含まれます。私はこれをすべて削除すると、この作業はうまく動作します。ご回答有難うございます – Fred

0

問題が見つかりました。ルートコレクションには常にデフォルトルートが含まれます。私はこれをすべて削除すると、この作業はうまく動作します。

関連する問題