在类库中使用 API 接口,在 API 接口中使用类库? [关闭]
Posted
技术标签:
【中文标题】在类库中使用 API 接口,在 API 接口中使用类库? [关闭]【英文标题】:Using API Interface in Class Library, and the Class Library in API Interface? [closed] 【发布时间】:2020-10-05 16:48:02 【问题描述】:我的项目看起来像这样:
Solution
|-> Continent.Data (Class Library)
ContinentRepository.cs
|-> ContinentsApi (WebApi)
ContinentController.cs
IContinentRepository.cs
Continent.cs
我的问题是我需要 ContinentsApi 才能使用 Continent.Data,但也需要 Continent.Data 才能使用 ContinentsApi。
【问题讨论】:
ContinentRepositor
库是什么?我们对此一无所知,因此请提供上下文。 “不能”到底是什么意思?你尝试了什么?什么地方出了错?您面临什么具体问题?在我们为您提供适当的帮助之前,需要更多信息和明确性。如果您需要有关如何提出一个广受欢迎且易于回答的问题的进一步指导,请阅读How To Ask。谢谢。
你需要一个类的实例而不是类名。
您是否添加了对 API 项目的引用?您的界面是否标记为public
?有关“不能”具体含义的详细信息会有所帮助。
【参考方案1】:
我无法实现 IContinentRepository 或使用类库 ContinentRepository 中的 Continent 类
如果我理解正确,您实际上是想这样做:
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
被认为是您的解决方案的composition root,其中创建了依赖关系图。应该只有一个复合根。因此,ContinentsApi
还将引用 Continent.Data
,以便您可以在您的 Continent.Data
项目中构建或注册 DI 容器中的实现。
Domain
项目消除了循环引用问题,从而解决了您的问题。
添加对其他项目的引用:
右键单击要添加引用的项目 转到Add
-> Project Reference...
选中您要引用的项目旁边的框
点击OK
或者,如果您在 .NET Core 项目中右键单击 Dependencies
,或在 .NET Framework 项目中右键单击 References
,则可以更快地完成此操作,这两者都可以在解决方案中的项目下方找到.这是您可以在 .NET Core 项目中找到它的图片:
【讨论】:
非常感谢,我很难理解这个问题并且找不到解决方案,但现在我理解并将调整该项目!以上是关于在类库中使用 API 接口,在 API 接口中使用类库? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章