最初に、私はpublic class DatabaseFactory : Disposable, IDatabaseFactory
と定義されているdbcontextファクトリを持っています。存在しない場合はコンテキストを作成します。ninjectを使用して単一のファクトリインスタンスを複数のリポジトリと作業単位に挿入する方法はありますか?
次に、コンストラクタでファクトリを取得するpublic class Repository<T> : IRepository<T> where T : class
と定義されている汎用リポジトリがあります。私はこれを継承する他の具体的なリポジトリを持っています。
また、コンストラクタ内でファクトリを取得し、すべてのリポジトリが使用するはずのファクトリ内のコンテキストに対するすべての変更を保存する、public class UnitOfWork : IUnitOfWork
と定義されている作業単位クラスもあります。
私のコントローラでは、コンストラクタをpublic ProjectController(IDatabaseFactory factory, IUnitOfWork unitOfWork, IProjectRepository projectRep, IUserRepository userRep)
に設定しています。
基本的には、作業単位とすべてのリポジトリに渡す工場の同じインスタンスが必要です。 ninjectを使用すると、単一インスタンスをすべてのオブジェクトに渡すのではなく、オブジェクトごとに新しいファクトリを作成します。単一のインスタンスがninjectを介して渡されるようにする方法はありますか、または工場を正しく作成していないか、またはninjectを正しく理解していませんか?ここで
はninjectで私のバインディングです:
kernel.Bind<IProjectRepository>().To<ProjectRepository>();
kernel.Bind<IIssueRepository>().To<IssueRepository>();
kernel.Bind<IUserRepository>().To<UserRepository>();
kernel.Bind<IDatabaseFactory>().To<DatabaseFactory>();
kernel.Bind<IUnitOfWork>().To<UnitOfWork>();
本当ですか?過去1時間半の間、その答えを探してみました。それはまさに私が探していたものです。私はなぜそれがGoogleを介してその答えを見つけるのは難しいか分かりません。たぶん私はそれをずっと難しくしようとしていたかもしれません。再度、感謝します! – snoluet
私のポストが役に立つと分かったら、それを答えとして受け入れることができます:) – MonkeyCoder
私はあなたにそれをあまりにも早く答えました。そして今私は4分待たなければなりません:)ありがとう。ファクトリーをシングルトンとして配置すると、秒があるかどうかが簡単にわかります。現在のコントローラー内でのみ、単一のインスタンスアプリケーションを作成しますか? ProjectControllerよりもIssueControllerの工場の別のインスタンスが必要な場合(ただし、その特定のコントローラ内でそのインスタンスが1つだけ)、ninjectがそれを世話しますか? – snoluet