首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >类库中使用API接口,API接口中使用类库?

类库中使用API接口,API接口中使用类库?
EN

Stack Overflow用户
提问于 2020-10-05 16:48:02
回答 1查看 81关注 0票数 0

我的项目看起来是这样的:

代码语言:javascript
复制
Solution 
|-> Continent.Data (Class Library)
      ContinentRepository.cs
   
|-> ContinentsApi (WebApi)
      ContinentController.cs
      IContinentRepository.cs
      Continent.cs

我的问题是我需要ContinentsApi来使用Continent.Data,但也需要Continent.Data来使用ContinentsApi。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-05 18:49:29

我无法实现IContinentRepository或在类库ContinentRepository中使用欧洲大陆类

如果我对你的理解是正确的,你实际上想要这样做:

代码语言:javascript
复制
public class ContinentRepository : IContinentRepository
{
    public Continent GetById(int id) {}
}

但是你不能这样做,因为你的类库既不能访问Continent也不能访问IContinentRepository。这可以通过引用类库中的API项目来解决。然而,存在一个问题。为了能够使用您的ContinentRepository,您需要能够在您的API项目中构造它的实例,或者向DI容器注册实现。要解决这个问题,API项目需要引用类库才能访问ContinentRepository,因此我们将讨论真正的问题:循环引用。

您想要做的是可能的,但是您缺少的部分是您的Domain项目--另一个类库,一个不应该引用解决方案中任何其他项目的类库。这就是定义接口和业务逻辑的地方。在您的示例中,ContinentIContinentRepository都是您的域的一部分,因此它们应该位于您的Domain项目中。然后,解决方案结构如下所示:

代码语言:javascript
复制
 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核心项目中找到它的图片:

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64212890

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档