我正在尝试使用 Razor Pages 应用程序处理插件。
解决方案由 3 个项目组成:一个 Razor Pages 应用程序和两个 Razor 类库 (RCL)。应用must not静态引用 RCL 项目,它们必须作为插件加载:
内页没有什么特别的。功能页面仅生成简单的 HTML。索引页构建了一种菜单。
索引页模型:
public class IndexModel : PageModel
{
public IEnumerable<MenuItem> MenuItems { get; private set; }
public void OnGet()
{
MenuItems = new List<MenuItem>
{
new MenuItem { Route = "FeatureA", Title = "Feature A" },
new MenuItem { Route = "FeatureB", Title = "Feature B" }
};
}
}
索引页:
@page
@model IndexModel
@{
ViewData["Title"] = "Home page";
}
<div class="text-center">
<div class="navbar-collapse collapse d-sm-inline-flex flex-sm-row-reverse">
<ul class="navbar-nav flex-grow-1">
@foreach (var item in Model.MenuItems)
{
<li class="nav-item">
<a class="nav-link text-dark" asp-area="" asp-page="/@item.Route">@item.Title</a>
</li>
}
</ul>
</div>
</div>
当我运行该应用程序时,有菜单项,但它们的href
s 为空:
<div class="text-center">
<div class="navbar-collapse collapse d-sm-inline-flex flex-sm-row-reverse">
<ul class="navbar-nav flex-grow-1">
<li class="nav-item">
<a class="nav-link text-dark" href="">Feature A</a>
</li>
<li class="nav-item">
<a class="nav-link text-dark" href="">Feature B</a>
</li>
</ul>
</div>
</div>
当然,所有程序集(应用程序和功能程序集)都位于同一目录中。
菜单在以下两种情况下起作用:
- 如果我在 App 项目中引用 RCL 项目,这会扼杀插件的想法;
- 或者如果我把
App.deps.json
with FeatureLib_A
and FeatureLib_B
作为依赖项(只需保存第一种情况下的 deps 文件,删除引用,重建全部,复制保存的 deps 文件)。
另外,我尝试在中加载 RCL 程序集Startup
班级。
正在加载程序集,但是Index
页面行为相同。
有没有办法告诉 ASP 基础结构使用 RCL 程序集而不修改 deps 文件?我缺少什么?