asp.net核心mvc:将托管和业务逻辑/ ui拆分为单独的项目

Rav*_*ior 8 c# asp.net-core .net-standard

我想将解决方案至少分为两部分:

  • 托管技术(初始化Kestrel并设置所有中间件,例如swashbuckle,身份验证)
  • 业务逻辑和UI

因为我希望在配置过程的后期阶段可以替换托管配置。

我尝试将所有包含控制器,模型和视图的文件夹简单地移动到一个单独的项目中,如下图所示:

托管配置和业务逻辑分离的两个项目:

在此处输入图片说明

所以我

  • 将那些文件夹移至* .Implementation项目
  • 向程序包“ Microsoft.AspNetCore.Mvc”添加了nuget引用
  • 从* .Host项目引用了* .Implementation项目
  • 将该类添加到* .Implementation项目的“ Controllers”文件夹中:
using Microsoft.AspNetCore.Mvc;

namespace MyApp.Implementation.Controllers
{
    public class ExampleController : Controller
    {
        public ActionResult<int> Index()
        {
            return 5;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

如果启动应用程序并在浏览器中打开http:// localhost:5000 / example,则在浏览器中得到的结果为“ 5”。这向我表明,托管技术可以在单独的项目中找到我的控制器。

但是,当我在浏览器中打开http:// localhost:5000时,我得到一个异常页面,告诉我找不到Home-Controller的视图。控制台还显示异常:

fail: Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware[1]
      An unhandled exception has occurred while executing the request.
System.InvalidOperationException: The view 'Index' was not found. The following locations were searched:
/Views/Home/Index.cshtml
/Views/Shared/Index.cshtml
/Pages/Shared/Index.cshtml
Run Code Online (Sandbox Code Playgroud)

由于虚拟主机找到了我的控制器,所以我希望它也能找到视图。似乎并非如此。

我怎样才能告诉Web主机在哪里寻找视图呢?还是我需要对他们做任何事情?

Bar*_*and 6

除了Kirk Larkin评论要在ASP.NET Core中查看应用程序部分外,您可能还想看看Razor类库

我还没有尝试过,但是看起来它可以为您的问题提供解决方案。