私の意見の大半は通常の/Views/<Controller>
フォルダ階層の<action>.cshtml
ファイルです。これらはgitでソース制御され、通常の "rip and replace"の方法で展開されます。では、プロジェクトフォルダの外からViewフォルダを追加できますか?
ただし、私はRazorを使用してHTMLテンプレートを作成し、電子メールの.cshtmlテンプレートは各クライアントに固有です。したがって、外部のからApplication Rootフォルダをロードしてレンダリングできるようにするため、展開時にクライアント固有のカスタマイズが失われることはありません。
私は正常に作成され、IViewLocationExpander
インタフェースの実装を登録し、これはアプリケーションのルート内のフォルダで動作している
:
public class EmailViewLocationExpander : IViewLocationExpander
{
protected readonly String _TemplateFolder;
public EmailViewLocationExpander(String TemplateFolder)
{
_TemplateFolder = TemplateFolder.Trim('/');
}
public void PopulateValues(ViewLocationExpanderContext context)
{
}
public IEnumerable<string> ExpandViewLocations(ViewLocationExpanderContext context, IEnumerable<string> viewLocations)
{
var result = new List<String>(viewLocations);
result.Add($"/{ _TemplateFolder }/Email/{{0}}.cshtml");
result.Add($"/{ _TemplateFolder }/Shared/{{0}}.cshtml");
return result;
}
}
とても例えば、アプリケーションルート相対以外のパスのために動作するようには思えません/../Templates
は動作していないようです。
私はまた、現在、私の電子メールテンプレートのカスタム_ViewStart.cshtml
を持つに依存している、とMvc source codeを読んだことは、私の唯一のオプションは、現在のアプリケーションルート外の物理ファイルシステムを参照するために、カスタムIFileProvider
を実装することであると思うように私をリード - ということですそうであれば誰でも私に例を教えてもらえますか?
私は古いファイルを読んでいましたが、これはMvcが1つのファイルプロバイダしか受け付けないことを示していました。だから、CompositeFileProvider(これは.NETコアのものです)を探していて、単一のIFileProviderですが、(私はv1.1を使用しています)それは確かにIListであり、あなたが説明するように簡単に実装でき、魅力的に機能します。ありがとう。 \t services.Configure ( \t \t OPTS => \t \t { \t \t \t opts.FileProviders: –
私の場合、私は私の別の場所のための別のPhysicalFileProviderを作成しました。追加( \t \t \t \t新しいPhysicalFileProvider(パス) \t \t \t) \t \t} \t); –