首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >依赖注入和范围?

依赖注入和范围?
EN

Stack Overflow用户
提问于 2016-05-27 19:44:14
回答 1查看 3.5K关注 0票数 3

我正在开发最新的ASP.Net核心RC2,Web,只针对RC2。框架4.6.1.

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

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

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

代码语言:javascript
复制
services.AddSingleton<IMyCustomRepository, MyCustomRepository>();

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

代码语言:javascript
复制
public MyCustomController(IMyCustomRepository repository) { }

我的最终目标是在这里得到EF核心,包括InMemoryProvider。

到目前为止这个建得正确吗?我主要关心的问题之一是,我经常读到在使用ORMs (比如实体框架)时,存储库模式是如何不需要的,但我不确定这如何应用于unsure。

我已经读过,如果您使用Scoped,这里不应该使用AddSingleton,因为这取决于限定了作用域的DbContext (所以您应该使用它吗?)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-28 22:47:10

如果应用程序需要单例行为,请使用它。但是在这种情况下,您必须自己管理类中对象的生存期。但是,应该使用作用域生存期将实体框架上下文添加到服务容器中。如果您使用助手方法(如下面所示),就会自动处理这个问题:

代码语言:javascript
复制
public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<MyDbContext>(options =>
        options.UseInMemoryDatabase()
    )
}

将使用实体框架的存储库应该使用相同的生存期;也就是说,AddScoped.所以您的代码应该是这样的:

代码语言:javascript
复制
services.AddScoped<IMyCustomRepository, MyCustomRepository>();

“我的主要担心之一是,我经常读到在使用实体框架这样的ORMs时,存储库模式是如何不需要的,但我不确定这如何应用于EF Core。”

你应该在你的应用中使用储存库模式.你应该看看什么是

存储库模式,然后查看DbContext和DbSet是否实现了它。

看这个vid:https://www.youtube.com/watch?v=rtXpYpZdOzM

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37491159

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档