我的项目看起来是这样的:
Solution
|-> Continent.Data (Class Library)
ContinentRepository.cs
|-> ContinentsApi (WebApi)
ContinentController.cs
IContinentRepository.cs
Continent.cs我的问题是我需要ContinentsApi来使用Continent.Data,但也需要Continent.Data来使用ContinentsApi。
发布于 2020-10-05 18:49:29
我无法实现IContinentRepository或在类库ContinentRepository中使用欧洲大陆类
如果我对你的理解是正确的,你实际上想要这样做:
public class ContinentRepository : IContinentRepository
{
public Continent GetById(int id) {}
}但是你不能这样做,因为你的类库既不能访问Continent也不能访问IContinentRepository。这可以通过引用类库中的API项目来解决。然而,存在一个问题。为了能够使用您的ContinentRepository,您需要能够在您的API项目中构造它的实例,或者向DI容器注册实现。要解决这个问题,API项目需要引用类库才能访问ContinentRepository,因此我们将讨论真正的问题:循环引用。
您想要做的是可能的,但是您缺少的部分是您的Domain项目--另一个类库,一个不应该引用解决方案中任何其他项目的类库。这就是定义接口和业务逻辑的地方。在您的示例中,Continent和IContinentRepository都是您的域的一部分,因此它们应该位于您的Domain项目中。然后,解决方案结构如下所示:
Solution
|-> Continent.Data (Class Library)
ContinentRepository.cs
|
|
\|/ (Continent.Data references Domain)
|-> Contintent.Domain (Class Library)
IContinentRepository.cs
Continent.cs
/|\ (ContinentsApi references Domain)
|
|
|-> ContinentsApi (WebApi)
ContinentController.cs这里,ContinentsApi被认为是创建依赖关系图的解决方案的复合根。应该只有一个复合根。因此,ContinentsApi还将引用Continent.Data,以便您可以在Continent.Data项目中构造或注册DI容器中的实现。
Domain项目消除了循环引用问题,从而解决了您的问题。
添加对其他项目的引用:
Add -> Project Reference...OK或者,如果右键单击.NET核心项目中的.NET或.NET框架项目中的References,这两种方法都可以在解决方案中的项目下找到,则可以更快地完成这一操作。这是一张在.NET核心项目中找到它的图片:

https://stackoverflow.com/questions/64212890
复制相似问题