3

我在 IoC 容器工作单元模式中实现和注册时遇到问题,问题如下:在服务器端客户端-服务器应用程序上,我需要访问数据库我正在使用 Entity Framework 4 ORM,并且我需要为每个创建新的 DataContext从客户端应用程序请求数据库,类似于 Web MVC 应用程序。我意识到我需要使用工作单元模式,目前我是这样实现的:

    void SomeMethod()
    {
        using (var repository = _repositoryFactory.Create())
        {
            int id = 1;
            var entity = repository.GetById(id);
            // some code 

                repository.SaveOrUpdate();
        }
    }

其中 _repositoryFactory 在 IoC 中注册为 Single 实例并返回 Repository 的新实例 DataContext 被注入 Repository

 abstract class Repository<TEntity> : IRepository<TEntity> where TEntity : EntityBase 
{
   private readonly IDataContext _context;

    protected Repository(IDataContext context)
    {
        _context = context;
    }
  }

作为 IRepository 作为 IDataContext 在 IoC 容器中注册为每个依赖项的实例,我需要的是我想以下列方式使用工作单元:

 void SomeMethod()
    {
        using (var unitOfWork = _unitOfWorkFactory.Create())
        {
            int id = 1;
            var entity = _repository.GetById(id);
            // some code 

                repository.Commit();
        }
    }

在 IoC 中如何正确实现此逻辑和注册,或者在这种情况下我应该考虑其他方法,解决此问题的最佳方法是什么?

4

1 回答 1

1

不要混淆生命周期。存储库工厂也可以限定范围。性能损失很小。

通过进行该更改,您可以简单地在存储库工厂构造函数中获取工作单元。

于 2013-06-27T07:47:33.753 回答