我试图了解如何将大型Web应用程序(ASP.net Core Web API + UI的纯Angular;无Razor视图等)分离到具有针对每个不同应用程序区域明确交互范围的库中
我想要获得的理想结果是一个仅包含Program / Startup类和Angular Client应用程序的瘦Web项目,以及几个展示该应用程序每个主要区域功能的.net库。每个库都应仅将控制器/接口及其模型公开为公共类。
我发现了如何将控制器和模型放在单独的库中并启用它们的运行时发现,但是我遇到了不应暴露给主应用程序的类(例如DbContext
s及其类)的问题相关的POCO对象。没有理由将它们设为public
-仅应通过适当的控制器方法来调用它们。因此,我尝试将它们定义为内部容器,并使用它们的容器组件中的临时扩展方法将它们注册为服务-但是事实证明,我无法通过控制器中的DI构造函数注入获得它们:实际上,如果我将其标记为在公开的构造函数中,编译器抱怨构造器参数之一比控制器更难访问-如果我将构造器标记为内部运行时绑定失败并说找不到控制器。
我可以使用Service Locator模式来获取所需的服务,但是我了解(出于充分的理由)人们通常对此并不满意。除了将图书馆的所有内容公开之外,真的没有别的方法吗?