私たちがASP.NET JabbRチャンネルで議論したように、あなたが望むのはViewExpander
だと思います。
エクスパンダを設定し、それを使用してフレームワークに、ビューの検索を解釈する方法を伝えます。 {0}
- コントローラのアクション {1}
- コントローラ名 {2}
- エリア(該当する場合)
using System;
using System.Collections.Generic;
using System.Linq;
namespace Microsoft.AspNet.Mvc.Razor {
public class ViewExpander : IViewLocationExpander {
public void PopulateValues(ViewLocationExpanderContext context) {
}
public IEnumerable<string> ExpandViewLocations(ViewLocationExpanderContext context, IEnumerable<string> viewLocations) {
return viewLocations.ToList().Then(n => {
n.Add("/Layout/{1}/{0}.cshtml");
n.Add("/Layout/{0}.cshtml");
n.Add("/web/Views/{1}/{0}.cshtml");
n.Add("/web/Views/Shared/{0}.cshtml");
});
}
}
}
その後、あなたStartup.cs
で、ConfigureServices
方法では、あなたがそれを配線。
services.Configure<RazorViewEngineOptions>(o => {
o.ViewLocationExpanders.Add(new ViewExpander());
});
これらの名前の一部
は、ナイトリービルド/ビルド最新
RC2
エッジに変更されているかもしれませんが、機能はまだそこにあります。
コントローラーは任意のフォルダーに移動し、必要な名前空間を設定できます。そのため、何も変更する必要はありません。
これは、私に組み込まれたエリアのようです。 – Jasen
はい、少し...しかし、領域はまだモデル、ビュー、およびコントローラのフォルダを持っています。私はフラットな構造を作りたい。しかし、私の主な懸念事項は、質問状態のタイトルとして、MVCコアでカスタムコントローラファクトリを作成して使用する方法を学ぶことです。 –
このためにカスタムコントローラファクトリは必要ありません。 MVCはあなたのコントローラやモデルがどのように構造化されているか気にしません。それらはすべて最終的にDLLにコンパイルされ、プロジェクトフォルダを持つそれらの場所は無関係です。ビューは、ファイルシステムベースのものであり、フレームワークはそれらを見つける場所を知る必要があります。通常は独自のViewエンジンを意味します。また、Cielの言葉であるViewExpanderも意味します。もちろん、ツーリングはあなたの足場などの構造を理解できませんが、それは別の問題です。 –