あなたがすでにこの道を行き過ぎて他のアプローチを検討しているかどうかはわかりませんが、私は開発中のマルチテナンシー システムも持っており、Razor に基づいてビュー エンジンをオーバーライドすることでそれを実現しました。 .
public class MultiTenancyRazorViewEngine : RazorViewEngine
{
/// <summary>
/// Finds the specified partial view by using the specified controller context.
/// </summary>
/// <param name="controllerContext">The controller context.</param>
/// <param name="partialViewName">The name of the partial view.</param>
/// <param name="useCache">true to use the cached partial view.</param>
/// <returns>The partial view.</returns>
/// <exception cref="T:System.ArgumentNullException">The <paramref name="controllerContext"/> parameter is null (Nothing in Visual Basic).</exception>
/// <exception cref="T:System.ArgumentException">The <paramref name="partialViewName"/> parameter is null or empty.</exception>
public override ViewEngineResult FindPartialView(ControllerContext controllerContext, string partialViewName, bool useCache)
{
var searchedLocations = new List<string>();
var foundFile = Support.ResolvePath(string.Format("{0}.cshtml", partialViewName), controllerContext.HttpContext, controllerContext.RouteData, searchedLocations);
return foundFile == null
? new ViewEngineResult(searchedLocations)
: base.FindPartialView(controllerContext, foundFile, useCache);
}
/// <summary>
/// Finds the view.
/// </summary>
/// <param name="controllerContext">The controller context.</param>
/// <param name="viewName">Name of the view.</param>
/// <param name="layoutPath">The layout path.</param>
/// <param name="useCache">if set to <c>true</c> [use cache].</param>
/// <returns></returns>
public override ViewEngineResult FindView(ControllerContext controllerContext, string viewName, string layoutPath, bool useCache)
{
var searchedLocations = new List<string>();
var foundFile = Support.ResolvePath(string.Format("{0}.cshtml", viewName), controllerContext.HttpContext, controllerContext.RouteData, searchedLocations);
return foundFile == null
? new ViewEngineResult(searchedLocations)
: base.FindView(controllerContext, foundFile, layoutPath, useCache);
}
ビューを見つけるための独自のサポート メソッド「ResolvePath」があります。訪問中のサイトを (ホスト名を介して) 保存した HttpContext を使用し、そのホスト名 (またはクライアントの一意の ID) に基づいて結果をキャッシュします。また、ビューを検索するために独自の形式のパスを実行できるため、次のことができます。
ビューの一部をオーバーライドする場合は、Views/Controller/Action.cshtml または Views/Custom/[client]/Controller/Action.cshtml (または非常に小さなパーシャル)。
申し訳ありませんが、それはあなたの特定の質問に実際には答えていませんが、まったく役に立ちますか? このアプローチに興味がある場合は、さらにコードを提供できます。