依赖注入和范围?

时间:2016-05-27 19:44:14

标签: c# entity-framework asp.net-core .net-core-rc2

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

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

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

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

services.AddSingleton<IMyCustomRepository, MyCustomRepository>();

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

public MyCustomController(IMyCustomRepository repository) { }

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

到目前为止这是否正确构建?我主要担心的一个问题是,在使用Entity Framework等ORM时,我一直在阅读有关存储库模式的必要性,但我不确定这是如何应用于EF Core的。

我已经读过如果你使用EF Core,你不应该在这里使用AddSingleton,因为这取决于Scoped的DbContext(所以你应该使用它)?

1 个答案:

答案 0 :(得分:3)

如果您的应用程序需要单例行为,请使用它。但在那种情况下,你会有 自己管理对象在课堂上的生命。 “但是,实体框架的背景应该是 使用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