3

IoC コンテナの Unit of Work パターンの実装と登録に問題があります。問題は次のとおりです。サーバー側のクライアント サーバー アプリケーションでは、Entity Framework 4 ORM を使用しているデータベースにアクセスする必要があり、新しい DataContext を作成する必要があります。 Web MVC アプリケーションと同様に、クライアント アプリケーションからデータベースにアクセスします。Unit of Work パターンを使用する必要があることに気付きました。現在、次のように実装しています。

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

                repository.SaveOrUpdate();
        }
    }

ここで、_repositoryFactory は IoC で単一インスタンスとして登録され、DataContext がリポジトリに注入されたリポジトリの新しいインスタンスを返します

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

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

IDataContext としての IRepository は依存関係ごとのインスタンスとして IoC contanier に登録されており、次のように Unit of Work を使用する必要があります。

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

                repository.Commit();
        }
    }

このロジックと登録を IoC でどの程度正しく実装するか、この場合は他のアプローチを検討する必要があります。この問題を解決する最善の方法は何ですか?

4

1 に答える 1

1

ライフタイムを混在させないでください。リポジトリ ファクトリもスコープ指定できます。パフォーマンスの低下は最小限です。

その変更を行うことで、リポジトリ ファクトリ コンストラクターで Unit Of Work を簡単に取り込むことができます。

于 2013-06-27T07:47:33.753 に答える