2

このチュートリアルに従って、一般的なリポジトリと作業単位のパターンを実装しようとしています。パターンに加えて、Ninject を使用して Web アプリの依存性注入も行いました。

私が使用した特定のバインディングは次のとおりです。

private static void RegisterServices(IKernel kernel)
{
    kernel.Bind(typeof(IGenericRepository<>))
          .To(typeof(GenericRepository<>)).InSingletonScope();
    kernel.Bind<IUnitOfWork>()
          .To<UnitOfWork>();
}

ただし、チュートリアルによると、すべてのリポジトリが次のように 1 つのインスタンスのみを共有するように、クラスのDbContext各リポジトリ プロパティにを渡す必要があります。UnitOfWorkDbContext

public GenericRepository<Course> CourseRepository
{
    get
    {
        if (this.courseRepository == null)
        {
            this.courseRepository = new GenericRepository<Course>(context);
        }
        return courseRepository;
    }
}

問題は、インスタンスが Ninject によって注入されるたびに、DbContextインスタンス (UnitOfWorkクラスに存在する) をコンストラクターに渡す方法です。メソッドについては知っていますが、その時点でインスタンスにアクセスできないため、呼び出しで使用できません。GenericRepositoryGenericRepositoryWithConstructorArgumentkernel.BindDbContext

4

1 に答える 1

0

IMHOあなたの問題は依存性注入の解決の問題ではなく、GenericRepositoryオブジェクトを作成するときのインスタンス依存性です(IGenericRepositoryを解決しているUnityOfWorkクラスに依存するdbcontextの特定のインスタンスが必要です)

したがって、ファクトリを使用して IGenericRepository インスタンスを作成することをお勧めします。

ここで詳細を確認できます

于 2013-04-10T01:43:55.087 に答える