1

私は非常によく似た2つのサイトを持っており、いくつかの場所で多くの共通点がありますが、他の場所ではまったく異なります。そこで、3つのmvc4アプリケーションMainSiteA、MainSiteB、SharedUIを作成し、RazorGeneratedを使用して2つのサイト間でビューをプリコンパイル(および共有)しました。現在の問題は、SharedUIビューがMainSiteAのコンパイル済みまたは非コンパイル済みビューから優先されることであり、その逆も同様です。

持っている:

SiteA:
    Views/Index.cshtml (a)

SiteB:
    Views/Index.cshtml (b)
    Views/Header.cshtml (b)

SharedUI:
    Views/Index.cshtml (s)
    Views/Header.cshtml (s)
    Views/Footer.cshtml (s)

この方法でサイトに応じて特定のページにアクセスするにはどうすればよいですか?

SiteA
Index.cshtml (a)
Header.cshtml (s)
Footer.cshtml (s)

SiteB
Index.cshtml (b)
Header.cshtml (b)
Footer.cshtml (s)

MVCで最初に独自のMVCアプリケーションを確認したいのですが、ビューが見つからない場合は、共有ライブラリ(SharedUI)でビューを確認してください。

4

1 に答える 1

5

RazorGenerator.Mvc 2.1.0には、CompositePrecompiledMvc​​Engineクラスが含まれています。RazorGeneratorを使用して各プロジェクト内のビューをプリコンパイルすると、サイトAの次のエンジン登録を使用できるようになります。

var engine = new CompositePrecompiledMvcEngine(
    PrecompiledViewAssembly.OfType<SomeSharedUIClass>(),
    PrecompiledViewAssembly.OfType<SomeSiteAClass>(
        usePhysicalViewsIfNewer: HttpContext.Current.IsDebuggingEnabled));

ViewEngines.Engines.Insert(0, engine);
VirtualPathFactoryManager.RegisterVirtualPathFactory(engine);

そしてサイトBの同様のコード:

// ...
    PrecompiledViewAssembly.OfType<SomeSiteBClass>(
// ...

エンジンのコンストラクターにアセンブリを登録すると、各要素にビューの仮想パス(キー)とコンパイルされたビュータイプ(値)の間のマッピングが含まれるハッシュテーブルが作成されます。そのようなキーが以前のアセンブリの1つにすでに登録されている場合は、このマッピングを現在のアセンブリのタイプでオーバーライドするだけです。

したがって、SharedUIアセンブリの登録後、ハッシュテーブルには次のマッピングが含まれます。

"~/Views/Index.cshtml"   -> SharedUI.Index
"~/Views/Header.cshtml"  -> SharedUI.Header
"~/Views/Footer.cshtml"  -> SharedUI.Footer

SiteAアセンブリ登録を配置すると、ハッシュテーブルには次のものが含まれます。

"~/Views/Index.cshtml"   -> SiteA.Index
"~/Views/Header.cshtml"  -> SharedUI.Header
"~/Views/Footer.cshtml"  -> SharedUI.Footer

また、ビューが「〜/ Views / Footer.cshtml」と「〜/ Views / Sidebar.cshtml」の別のアセンブリを配置すると、ハッシュテーブルには次のものが含まれます。

"~/Views/Index.cshtml"   -> SiteA.Index
"~/Views/Header.cshtml"  -> SharedUI.Header
"~/Views/Footer.cshtml"  -> Another.Footer
"~/Views/Sidebar.cshtml" -> Another.Sidebar
于 2013-06-07T07:26:25.373 に答える