C# 工作单元示例

C# 工作单元示例,c#,entity-framework,repository-pattern,dbcontext,unit-of-work,C#,Entity Framework,Repository Pattern,Dbcontext,Unit Of Work,我读了这一页: 这很有趣。作者对该主题有很好的了解,但他不愿意向社区提供样本 我想使用“注入式工作单元工厂”模式,但我不知道如何实现存储库。例如,我不知道应该在哪里创建DbContext,在哪里调用SaveChanges() 任何帮助都将不胜感激! 谢谢我会仔细考虑是否应该实现工作单元模式的另一个实现,因为正如其他人所说,DbContext在实现该模式方面做得相当好。我曾经在代码库中,人们添加了额外的抽象,通常你会发现抽象对你没有好处,因为它们添加的问题至少和它们解决的问题一样多。考虑离开,直到

我读了这一页: 这很有趣。作者对该主题有很好的了解,但他不愿意向社区提供样本

我想使用“注入式工作单元工厂”模式,但我不知道如何实现存储库。例如,我不知道应该在哪里创建DbContext,在哪里调用SaveChanges()

任何帮助都将不胜感激!
谢谢

我会仔细考虑是否应该实现工作单元模式的另一个实现,因为正如其他人所说,
DbContext
在实现该模式方面做得相当好。我曾经在代码库中,人们添加了额外的抽象,通常你会发现抽象对你没有好处,因为它们添加的问题至少和它们解决的问题一样多。考虑离开,直到需要。p> 但是,你的问题的答案是

  • 找出你的应用程序的“入口点”在哪里。例如,对于MVC项目,它是一个控制器
  • 使用依赖注入创建入口点/控制器

    public CustomerController(CustomerService customerService)
    {
        this.customerService = customerService;
    }
    
  • 适当使用服务

    public ActionResult Edit(int id)
    {
        var model = this.customService.GetCustomer(id);
        return View(model);
    }
    
  • 设置依赖注入,为您的工作单元提供正确的生命周期

    kernel.Bind<IUnitOfWork>().To<EntityFrameworkUnitOfWork>().InRequestScope();
    kernel.Bind<ICustomerService().To<CustomerService>();
    kernel.Bind<ICustomerRepository>().To<CustomerReposotory>();
    
    kernel.Bind().To().InRequestScope();
    
    kernel.BindEntity框架和DB上下文封装了工作单元模式,无需自行实现。在添加答案或注释之前,请阅读链接页面。我知道有数百种方法可以实现UoW和存储库模式,但我的问题非常具体到“注入的工作单元工厂”。您可以简单地实现本文所述的工作单元模式,但只需添加工厂模式即可创建UoW: