依赖注入和作用域?

Dependency Injection and Scope?

我正在使用最新的 ASP.Net Core RC2,Web API,仅针对 Windows。框架 4.6.1.

我对标准存储库模式的作用与 Core 处理控制器依赖项注入的方式感到困惑。我只是想确保这仍然是正确的方法,因为那里没有太多文档(否则会自相矛盾)。

按照我现在的设置方式,我有一个用于 CRUD 操作的标准存储库接口以及实现这些操作的关联 class。

我正在将 存储库 注入控制器。我采取的两个步骤是(在 Startup.csConfigureServices() 中):

services.AddSingleton<IMyCustomRepository, MyCustomRepository>();

然后我的控制器正在接收存储库:

public MyCustomController(IMyCustomRepository repository) { }

我的最终目标是在这里获取 EF Core,包括 InMemoryProvider。

目前构建正确吗?我的主要担忧之一是我经常阅读有关在使用像 Entity Framework 这样的 ORM 时存储库模式是不必要的,但我不确定这如何适用于 EF Core。

我了解到,如果您使用的是 EF Core,则不应在此处使用 AddSingleton,因为它依赖于 Scoped 的 DbContext(因此您应该改用它)?

如果您的应用程序需要单例行为,请使用它。但在那种情况下,你将拥有 自己在 class 中管理对象的生命周期。 “但是,Entity Framework 上下文应该是 使用 Scoped 生命周期添加到服务容器。这是自动处理的 如果您使用如下所示的辅助方法:

public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<MyDbContext>(options =>
        options.UseInMemoryDatabase()
    )
}

将使用 Entity Framework 的存储库应该使用相同的生命周期;也就是说,AddScoped... 所以你的代码应该是这样的:

services.AddScoped<IMyCustomRepository, MyCustomRepository>();

“我主要担心的一个问题是我一直在阅读有关存储库模式如何不 使用像 Entity Framework 这样的 ORM 时是必要的,但我不确定这如何适用于 EF Core。"

你应该在你的应用程序中实现存储库模式......你应该阅读什么是

存储库模式,然后查看 DbContext 和 DbSet 是否满足它。

观看此视频:https://www.youtube.com/watch?v=rtXpYpZdOzM