【发布时间】:2019-05-25 18:25:10
【问题描述】:
我想将我的解决方案至少分成两部分:
- 托管技术(初始化 Kestrel 并设置所有中间件,例如 swashbuckle、身份验证)
- 业务逻辑和用户界面
因为我希望在开发过程的后期阶段可以替换托管配置。
我尝试简单地将所有包含控制器、模型和视图的文件夹移动到一个单独的项目中,如下图所示:
托管配置和业务逻辑分离的两个项目:
所以我
- 将这些文件夹移至 *.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;
}
}
}
如果我启动应用程序并在浏览器中打开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
由于网络主机找到了我的控制器,我希望它也能找到视图。似乎并非如此。
我怎样才能告诉网络主机在哪里寻找视图呢?还是我需要对他们做些什么?
【问题讨论】:
-
我认为 UI 与托管技术的耦合非常紧密,强制分离可能需要一个 hacky 解决方案。我理解分离业务逻辑的必要性,但你真的应该分离 UI 引擎吗?
标签: c# asp.net-core .net-standard