2

最新のベータ リリースで ASP.NET MVC アプリケーションを構築しようとしていますが、既定のプロジェクト レイアウトを変更できるかどうか疑問に思っています。

/Views/Home/Index.aspx /Views/Home/About.aspx

/Blog/Views/Home/Index.aspx /Blog/Views/Home/About.aspx

/フォーラム/ビュー/ホーム/Index.aspx /フォーラム/ビュー/ホーム/About.aspx

目標は、1 つの Web プロジェクト内で「アプリケーション」をある程度分離することです。Thomas Owens が既にここで質問したようなものです: MVC フレームワークの下で、他の開発者はどのディレクトリ構造を期待するでしょうか?

もちろん、これにはビューだけでなく、コントローラーも含める必要があります。

4

3 に答える 3

1

はい、できるはずです。1 つの方法を考えることができます。他にもあるかもしれません。

最初のステップは、アプリケーション名を含むようにデフォルト ルートを変更することです。

routes.MapRoute("Default",
                "{applicationName}/{controller}/{action}/{id})",
                null, null);

2 つの "アプリケーション" を 1 つのアセンブリ内の異なる名前空間にグループ化しようとしていると思います。したがって、次のような 2 つの名前空間がある場合があります。

  • MyApp.Blog.Controllers
  • MyApp.Forum.Controllers

次に、正しいコントローラーをインスタンス化するように、コントローラー ファクトリを変更する必要があります。これを行うには、DefaultControllerFactory をサブタイプ化し、GetControllerType メソッドをオーバーライドします。

    protected override System.Type GetControllerType(string controllerName)
    {
        string applicationName;
        if (RequestContext != null && 
           RequestContext.RouteData.Values.TryGetValue(
           "applicationName", out applicationName)) {
           // return controller type using app name to 
           // look up namespace and controllerName argument
           return ...
        }

        // if no match, maybe it's a different controller/route
        return base.GetControllerType(controllerName);
    }

最後に、MVC に ControllerFactory を使用するように指示する必要があります。Global.asax.cs で:

    private void Application_Start(object sender, EventArgs e)
    {
        RegisterRoutes(RouteTable.Routes);
        ControllerBuilder.Current.SetControllerFactory(
            MyApp.MyControllerFactory());
    }

ビューの検索も同様に処理できます。この場合、WebFormViewEngine をサブタイプします。

于 2008-10-23T21:15:59.930 に答える
1

モノレールの「エリア」に似たコントローラーをグループ化するための 1 つのアプローチを説明するブログ記事を書きました。ただし、ネストされた領域にはまだ対応していません。

http://haacked.com/archive/2008/11/04/areas-in-aspnetmvc.aspx

于 2008-11-04T21:16:58.693 に答える
0

これは新しい概念ではありません。モノレールでは「エリア」と呼んでいます。最近、ATL.NET フォーラムやその他の場所で、このトピックについて多くの話題がありました。Steve Sanderson はこれを行う方法を考え出しましたが、どうやらいくつかの問題が残っているようです。これに応えて、MVC チームは今後のリリースに向けて「詳細な調査」を行う予定です。

于 2008-10-23T21:41:08.523 に答える