2.0

2011-01-22 1 views
1

をninjectするために、このninject 1.0のコードを変換する私はこのチュートリアルにhttp://damianm.com/tech/nhibernate-mvc-and-ninject/2.0

に従うことをしようとしていますが、私はいくつかの問題に実行していると私は、彼らは、彼らが私2.0

をリリースしたときに行われた変更に関連していると考えていますninject 1.0を使用したことがなく、ninject 2.0を1週間未満で使用していたので、変換が難しいと感じています。

私は

//2.0 
    Bind<ISession>().ToProvider(new SessionProvider()).InRequestScope(); 

//2.0 
     Bind<ISessionFactory>().ToProvider(new SessionFactoryProvider()).InSingletonScope(); 

この

//1.0 
    Bind<ISession>().ToProvider(new SessionProvider()).Using<OnePerRequestBehavior>(); 

に変更するには、この

//1.0 
    Bind<ISessionFactory>().ToProvider(new SessionFactoryProvider()).Using<SingletonBehavior>(); 

必要だと思います私は、彼らが

// 1.0 -SimpleProvider 
public class SessionProvider : SimpleProvider<ISession> 
public class SessionFactoryProvider : SimpleProvider<ISessionFactory> 

以上であるものを見つけることができません

これらのものは、私がこれまでに変換する必要があるもの識別するものです。

また、私は本当にそれが何のためにあるのかを知らない彼のリポジトリクラス

Bind<IRepository<Post>>().To<Repository<Post>>(); 

の一つでこれを参照してください。

答えて

2

SimpleProviderは私が右のものを持って

public class SessionProvider : Provider<ISession> 
public class SessionFactoryProvider : Provider<ISessionFactory> 
+1

おかげで、その後プロバイダに変更しました。私はあなたがInRequestScope()かどうか知っているのだろうかと思っています。 nhibernateセッションのようなものを自動的に閉じますか? – chobo2

+0

Ninjectの最新バージョンは、デフォルトBeahviorがオブジェクトInRequestScopeを即座にリリースして処理することに変更されました。トランザクションを閉じるには、セッションの廃棄時または非アクティブ化時にこれを行う必要があります。 –

+0

したがって、私のセッションは要求スコープ内にあるので、セッションが終了しています。私はトランザクションを閉じることについて心配する必要がありますか?非アクティブ化アクションとは何ですか?私はコミットを行うときに私はuse文を使用して、それを閉じさせることを考えていました。 – chobo2