【问题标题】:.Net Core - How do i access .net core entity framework from another .net core class library (or project).Net Core - 如何从另一个 .net 核心类库(或项目)访问 .net 核心实体框架
【发布时间】:2019-12-07 00:19:23
【问题描述】:

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

所以问题是我如何在另一个类库的 .net 核心中访问我的 dbcontext 或实体框架?

在组件构建器中

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>();

【问题讨论】:

  • 在您想要访问您的类/接口的地方使用依赖注入 (DI),就像您拥有 services.AddTransient&lt;IBuild, Build&gt;() 一样注册它之后?我建议构造函数注入。

标签: asp.net-core-2.1


【解决方案1】:

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

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

这里的首要经验法则是类库应该尽可能通用。仅在您绝对需要它们时才使用依赖项。在可能的情况下,由库使用者提供依赖项,而只引用原始类型(字符串等)或抽象(接口/抽象类)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多