【发布时间】:2019-02-27 23:48:52
【问题描述】:
用例 一个独立的模板引擎,不会以任何方式干扰 AspNetCore (2.X) Web 应用程序中的正常 Razor 操作。
问题 在尝试实现上述内容的同时,我创建了一大堆基于 RazorViewEngine、RazorViewCompilerProvider、DefaultRazorPageFactoryProvider、DefaultRazorViewEngineFileProviderAccessor 和 RazorViewEngineOptions 的派生包装类,以便这些可以向 DI 注册并注入,同时在普通 Razor 中没有副作用代码路径。除了一个烦人的问题外,我已经成功了,我仍然需要在普通的 RazorViewEngineOptions 而不是我的包装类中配置我的自定义 FileProvider (TemplateRepository)。
例如在 Startup.cs 的以下代码中,即使在我的自定义 Options 对象中指定了文件提供程序,也就是注入包装类的内容,除非第二个 service.Configure 也是,否则不会为 View 请求调用 TemplateRepository包括(使用 RazorViewEngineOptions)。
services.Configure<TemplateOptions>(options =>
{
options.ViewLocationExpanders.Add(new TemplateNameExpander());
options.ViewLocationFormats.Add("{0}");
options.AreaViewLocationFormats.Add("{0}");
options.FileProviders.Clear();
options.FileProviders.Add(new TemplateRepository(new SqlConnectionFactory(configuration)));
});
services.Configure<RazorViewEngineOptions>(
options =>
{
options.FileProviders.Add(new TemplateRepository(new SqlConnectionFactory(configuration)));
});
这将向我表明 RazorViewEngine 依赖关系树的某个地方正在注入 RazorViewEngineOptions,但我找不到它。
完整源码@GitHub
【问题讨论】:
标签: razor asp.net-core-mvc asp.net-core-2.0