.Net Core - 我如何从另一个 .net core class 库(或项目)访问 .net core entity framework

.Net Core - How do i access .net core entity framework from another .net core class library (or project)

我正在尝试访问我的网站项目根目录中的 dbcontext,我创建了另一个名为 ComponentBuilder 的 .net 核心 class 库,在这里我创建了两个 classes称为 IBuild.cs(接口)和 Build.cs(class)。所以在启动文件中我尝试添加 addscope() 但我无法引用 ComponentBuilder 库来执行此操作。

所以问题是我如何在另一个 class 库的 .net 核心中访问我的 dbcontext 或 entity framework?

ComponentBuilder 内部

using System;
using System.Collections.Generic;
using System.Text;

namespace ComponentBuilder
{
    class Build: IBuild
    {
    }
}

using System;
using System.Collections.Generic;
using System.Text;

namespace ComponentBuilder
{
    class Build: IBuild
    {
    }
}

正在启动

services.AddScoped<IBuild, Build>();

两件事。首先,要访问 anything,您必须添加引用。这意味着要让 class 库访问 Web 项目中的 class,class 库必须引用该 Web 项目。但是,您实际上不应该那样做,而且您可能 不能 那样做,因为您的 Web 项目可能也需要引用您正在创建的 class 库.这将创建一个循环引用,这是不可能发生的。总之,如果您的 Web 项目需要 class 而您的 class 库需要相同的 class,那么您需要 另一个 class 库,你可以把它 class 这样两个项目都可以在那里引用它。

其次,您首先应该认真考虑您的 class 库是否确实 需要它。 Class 图书馆应该处理抽象。如果您的 class 库直接依赖于一个特定的派生上下文,那么它只能使用该上下文。另一方面,如果您依赖 DbContext,那么它可以与任何使用 EF Core 的东西一起使用。这使您的库具有更大的可重用性。即使这样也可以抽象出来。如果您的图书馆主要不涉及数据层——它只需要上下文中的一些东西——那么您可以只依赖于该特定数据,并将其留给图书馆消费者(例如,您的网络应用程序)去做获取该数据所需的一切。然后,您的库完全不知道数据源,甚至不需要依赖 EF Core。

这里的首要规则是 class 库应该尽可能通用。仅在 绝对 需要它们时才使用依赖项。在可能的情况下,让库使用者提供依赖项,而不是仅引用原始类型(字符串等)或抽象(interfaces/abstract classes)。