2012-05-12 5 views
0

私はnhibernateの作業単位パターン&を実装しました。私はDIとしてninjectを使用します。私は複数のデータベースを持っているので、私は異なるリポジトリと作業ユニットの異なる実装を持っています。 ninjectでIRepositoryを結合するとき同じインスタンスを挿入

public class SomeUnitOfWork : GenericUnitOfWork 
{ 
    [Inject] 
    public SomeUnitOfWork(IDatabaseConnection connection) 
     : base(connection) 
    { 
    } 

と一部レポ

[Inject] 
    public IRepository<Transaction> Transactions { get; private set; } 

    [Inject] 
    public IRepository<Paramdef> Paramdefs { get; private set; } 

    [Inject] 
    public IRepository<Transmap> Transmaps { get; private set; } 

    [Inject] 
    public IRepository<User> Users { get; private set; } 

Iが使用GenericRepository実装:

public interface IDatabaseConnection 
{ 
    ISessionFactory SessionFactory { get; } 
} 

及び作業単位:私は仕事の単位にIDatabaseConnectionインタフェースを注入するために使用しますモジュールには、ISessionFactoryから再取得できるものよりも、ISessionを待つ引数があります。どうしたらいいですか?

答えて

1

Ninjectで作成できるように、工場ではなくUoWにISessionを注入する必要があります。セッションはある範囲内にある必要があります。 InRequestScope(Webアプリケーション用)次に、どちらを使用するかを定義するセッションバインディングに条件を追加します。例えば。

Bind<ISession>().ToMethod(context => context.Kernel.Get<ISessionFactory>("DB1")).WhenAnyAnchestorNamed("UoW1").InRequestScope(); 
Bind<SomeUnitOfWork>().ToSelf().Named("UoW1"); 
関連する問題