2012-03-28 23 views
1

私はEntity Framework 4.1を使用してASP.Net MVC 3 Webアプリケーションを作成しています。代わりに私のコントローラに私のUOWクラスを注入する、http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/implementing-the-repository-and-unit-of-work-patterns-in-an-asp-net-mvc-applicationASP.Net MVC 3作業単位の処理

しかし、この優れたチュートリアルで説明したようにワーク・クラスの私のユニットは、私がそう

public class ListService : IListService 
{ 
    private IUnitOfWork _uow; 

    public ListService(IUnitOfWork uow) 
    { 
     _uow = uow; 
    } 

    public IList<List> GetAllListTypes() 
    { 
     return _uow.Lists.Get().OrderBy(l => l.description).ToList(); 
    } 
} 

私のユニットのように、私のサービスクラスで行うと同じですこのクラスは次のようなものです

public class UnitOfWork : IUnitOfWork, IDisposable 
{ 
    readonly LocumEntities _context = new LocumEntities(); 
    private GenericRepository<List> _lists = null; 

    public IGenericRepository<List> Lists 
    { 
     get 
     { 
      if (_lists == null) 
      { 
       _lists = new GenericRepository<List>(_context); 
      } 
      return _lists; 
     } 
    } 

    public void Commit() 
    { 
     _context.SaveChanges(); 
    } 

    private bool disposed = false; 

    protected virtual void Dispose(bool disposing) 
    { 
     if (!this.disposed) 
     { 
      if (disposing) 
      { 
       _context.Dispose(); 
      } 
     } 
     this.disposed = true; 
    } 

    public void Dispose() 
    { 
     Dispose(true); 
     GC.SuppressFinalize(this); 
    } 

} 

これはすべて正常です。しかし、私はあなたのDbContextを処分する私のUoWクラスのメソッドを持っていることに気づくでしょう。私はこの方法を修正して、私の中でそれを配置しようとしたようなすべての業務トランザクションが上記のチュートリアルで行われた後、彼らはコントローラに

protected override void Dispose(bool disposing) 
{ 
     db.Dispose(); 
     base.Dispose(disposing); 
} 

を次のコードを使用してこれを行うUOWクラスを処分したいですサービスクラスしかし、それは動作しない、すなわち、UOWクラスのdisposeメソッドは

protected override void Dispose(bool disposing) 
{ 
     _uow.Dispose(); 
} 

と呼ばれることは決してありません誰かが私のUOWクラスを処分する方法で正しい方向に私を指すことができれば、私は非常に感謝。

ありがとうございます。これに

+0

どのようなサービスを作成していますか?それはASP.NET Web API、WCF、Windowsサービス、ビジネスロジックサービスか何ですか?あなたのサービスの廃棄は今まで呼ばれていますか?あなたのサービスを処分する責任は誰にありますか? –

+0

@ LadislavMrnka - サービスクラスは、自分のビジネスロジックのためのASP.Netクラスセットアップです。サービスレイヤーは、自分のUIとドメインモデルの間にあります。私はサービスクラスにdisposeメソッドを持っていません。 – tgriffiths

+0

@tgriffiths - 依存性注入にはどのIoCコンテナを使用しますか?それらのほとんどは、作成したコンポーネントを処分することができます。 –

答えて

0

人々

答えは私が私のIoCのためのユニティを使用していて、ワーク・クラスの私のユニットを廃棄するの世話をするように設定することが可能です。

+3

これをどのように実現したか、つまり組み込みのUnity LifeTimeManagerを使用しましたか?私の理解から、デフォルトのTransientLifetimeManagerは各呼び出しのインスタンスを新しくし、Dispose()の呼び出しを処理しません。基本的に、UOWをどのようにUnityに登録しましたか? –

関連する問題