依赖注入和作用域?
Dependency Injection and Scope?
我正在使用最新的 ASP.Net Core RC2,Web API,仅针对 Windows。框架 4.6.1.
我对标准存储库模式的作用与 Core 处理控制器依赖项注入的方式感到困惑。我只是想确保这仍然是正确的方法,因为那里没有太多文档(否则会自相矛盾)。
按照我现在的设置方式,我有一个用于 CRUD 操作的标准存储库接口以及实现这些操作的关联 class。
我正在将 存储库 注入控制器。我采取的两个步骤是(在 Startup.cs
、ConfigureServices()
中):
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 是否满足它。
我正在使用最新的 ASP.Net Core RC2,Web API,仅针对 Windows。框架 4.6.1.
我对标准存储库模式的作用与 Core 处理控制器依赖项注入的方式感到困惑。我只是想确保这仍然是正确的方法,因为那里没有太多文档(否则会自相矛盾)。
按照我现在的设置方式,我有一个用于 CRUD 操作的标准存储库接口以及实现这些操作的关联 class。
我正在将 存储库 注入控制器。我采取的两个步骤是(在 Startup.cs
、ConfigureServices()
中):
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 是否满足它。