gpt4 book ai didi

c# - 如何将来自外部项目的 Controller 和 View 包含到 MVC6 中?

转载 作者:太空狗 更新时间:2023-10-29 21:04:34 25 4
gpt4 key购买 nike

我有一些模块有 Controller 和 View 。它基本上是我的网络应用程序的扩展。每个模块都在一个类库中。

我想从我的 Web 应用程序加载这些程序集。但我在这里运气不好。


我的解决方案文件结构如下:

src
|
|-- Web.Common (Class Library Project)
| |- Files like: filters, my own controller etc...
|
|-- WebApplication (ASP.NET5 WebSite)
| |- wwwroot
| |- Controllers
| |- Views
| |- etc...
|
|-- Module 1 (Class Library Project)
| |- Controllers
| |- Views
|
|-- Module 2 etc...

这些是我尝试过的:


我尝试实现自己的 IViewLocationExpander

public class CustomViewLocationExpander : IViewLocationExpander
{
public IEnumerable<string> ExpandViewLocations(ViewLocationExpanderContext context, IEnumerable<string> viewLocations)
{
yield return "/../Module1.Web/Views/Home/TestView.cshtml";
yield return "../Module1.Web/Views/Home/TestView.cshtml";
yield return "/Module1.Web/Views/Home/TestView.cshtml";
yield return "~/../Module1.Web/Views/Home/TestView.cshtml";
}

public void PopulateValues(ViewLocationExpanderContext context)
{

}
}

我尝试了所有想到的路径,但没有成功 :(

我得到:

InvalidOperationException: The view 'TestView' was not found. The following locations were searched:

~/Module1.Web/Views/Home/TestView.cshtml ~/../Module1.Web/Views/Home/TestView.cshtml /Module1.Web/Views/Home/TestView.cshtml /../Module1.Web/Views/Home/TestView.cshtml


所以我想也许默认的 IFileProvider 不会查看 WebApp 的根路径之外,因此我决定尝试实现我自己的 IFileProvider。

但是我在这里也没有任何成功。


也许有一个功能可以通过调用一些 ASP.NET 方法来实现这一点,但我不知道。

有什么建议吗?

最佳答案

Controller 将自动加载。要加载 View ,您需要 EmbeddedFileProviderCompositeFileProvider,它们都是新的,因此您需要从 aspnetvnext 提要中获取它们.

在您的启动 MVC6 项目的 project.json 中引用它们:

"Microsoft.AspNet.FileProviders.Composite": "1.0.0-*",
"Microsoft.AspNet.FileProviders.Embedded": "1.0.0-*",

Startup.cs 中更新您的服务注册:

    services.Configure<RazorViewEngineOptions>(options =>
{
options.FileProvider = new CompositeFileProvider(
new EmbeddedFileProvider(
typeof(BooksController).GetTypeInfo().Assembly,
"BookStore.Portal" // your external assembly's base namespace
),
options.FileProvider
);
});

在外部程序集的 project.json 中,添加:

  "resource": "Views/**"

这是一个示例实现,您可以克隆并运行它以查看它的实际效果: https://github.com/johnnyoshika/mvc6-view-components

关于c# - 如何将来自外部项目的 Controller 和 View 包含到 MVC6 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31561135/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com