我目前正在尝试从外部程序集中加载嵌入的 ViewComponent。
我已将其包含在我的项目文件中:
<EmbeddedResource Include="Views\**\*.cshtml" />
Run Code Online (Sandbox Code Playgroud)
因此,当我检查实际程序集并运行 GetManifestResourceNames() 时,我看到该文件已嵌入。
然后我在 Startup.cs 的 ConfigureService() 中调用这个方法:
public static IMvcBuilder GetModules(this IMvcBuilder mvcBuilder)
{
var embeddedFileProviders = new List<EmbeddedFileProvider>
{
new EmbeddedFileProvider(Assembly.GetCallingAssembly())
};
mvcBuilder.ConfigureApplicationPartManager(apm =>
{
foreach (string modulePath in Directory.GetFiles(Configuration.Settings.Path, "*.Module.dll"))
{
var assembly = Assembly.LoadFrom(modulePath);
var startUpType = (from t in assembly.GetTypes()
where t.GetInterfaces().Contains(typeof(IModuleStartup))
select t).FirstOrDefault();
RegisterModuleServices(mvcBuilder, startUpType);
apm.ApplicationParts.Add(new AssemblyPart(assembly));
embeddedFileProviders.Add(new EmbeddedFileProvider(assembly));
Modules.Assemblies.Add(assembly);
}
var compositeFileProvider = new CompositeFileProvider(embeddedFileProviders);
mvcBuilder.Services.AddSingleton<IFileProvider>(compositeFileProvider);
});
return mvcBuilder;
}
Run Code Online (Sandbox Code Playgroud)
我也没有用
mvcBuilder.Services.Configure<RazorViewEngineOptions>(o =>
{
o.FileProviders.Add(compositeFileProvider);
});
因为这根本不起作用,甚至没有调用 o.FileProviders.Add(compositeFileProvider) 操作。
当我注入 IFileProvider 时找到所有嵌入的文件提供程序,但是当我运行 _fileProvider.GetDirectoryContents(""); 时没有找到任何文件;
有人知道为什么吗?
所以我想出了为什么它没有返回任何东西......似乎我在创建新的 EmbeddedFileProvider 时没有设置 baseNameSpace 参数。笨啊。但是有很多例子没有设置这个并且它起作用了。希望这可以帮助其他一些遇到此问题的人。
| 归档时间: |
|
| 查看次数: |
4257 次 |
| 最近记录: |