我正在开发最新的ASP.Net核心RC2,Web,只针对RC2。框架4.6.1.
对于标准存储库模式的作用与Core处理控制器依赖注入的方式相比,我感到困惑。我只想确保这仍然是正确的方法,因为没有太多的文档(否则它会自相矛盾)。
按照我现在设置的方式,我有一个用于CRUD操作的标准存储库接口,以及实现这些操作的相关类。
我正在将存储库注入控制器。我已经采取的两个步骤是(在Startup.cs,ConfigureServices()中):
services.AddSingleton<IMyCustomRepository, MyCustomRepository>();然后,我的控制器正在接收存储库:
public MyCustomController(IMyCustomRepository repository) { }我的最终目标是在这里得到EF核心,包括InMemoryProvider。
到目前为止这个建得正确吗?我主要关心的问题之一是,我经常读到在使用ORMs (比如实体框架)时,存储库模式是如何不需要的,但我不确定这如何应用于unsure。
我已经读过,如果您使用Scoped,这里不应该使用AddSingleton,因为这取决于限定了作用域的DbContext (所以您应该使用它吗?)
发布于 2016-05-28 22:47:10
如果应用程序需要单例行为,请使用它。但是在这种情况下,您必须自己管理类中对象的生存期。但是,应该使用作用域生存期将实体框架上下文添加到服务容器中。如果您使用助手方法(如下面所示),就会自动处理这个问题:
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<MyDbContext>(options =>
options.UseInMemoryDatabase()
)
}将使用实体框架的存储库应该使用相同的生存期;也就是说,AddScoped.所以您的代码应该是这样的:
services.AddScoped<IMyCustomRepository, MyCustomRepository>();“我的主要担心之一是,我经常读到在使用实体框架这样的ORMs时,存储库模式是如何不需要的,但我不确定这如何应用于EF Core。”
你应该在你的应用中使用储存库模式.你应该看看什么是
存储库模式,然后查看DbContext和DbSet是否实现了它。
https://stackoverflow.com/questions/37491159
复制相似问题