0

このエラーが何であるかは知っていますが、私の質問は少し異なります。

これは、これらの脳の衰退の瞬間の1つです。

Repositoy と Unit of Work パターンに関する次の興味深い記事を読んでいます。

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-アプリケーション

私はこのコードをいじっていますが、DIでIoCを使用できるように調整しようとしています。

さて、ここで私は精神的な空白にぶつかったところです。

インターフェイスなどを使用するようにすべてのクラスを変更しています。したがって、次のコード スニペットが与えられます。

    public class UnitOfWork : IDisposable
    {
        private SchoolContext context = new SchoolContext();
        private GenericRepository<Department> departmentRepository;
        private GenericRepository<Course> courseRepository;

        public GenericRepository<Department> DepartmentRepository
        {
            get
            {

                if (this.departmentRepository == null)
                {
                    this.departmentRepository = new GenericRepository<Department>(context);
                }
                return departmentRepository;
            }
        }
    }
}

この行を編集するにはどうすればよいですか:

this.departmentRepository = new GenericRepository<Department>(context);

したがって、実際のクラスを参照する必要がないため、クラスが分離されていることを確認して、構文エラーの発生を回避できます。

Cannot create an instance of the abstract class or interface interface with type

よろしくお願いします!

4

2 に答える 2

0

http://www.tugberkugurlu.com/archive/generic-repository-pattern-entity-framework-asp-net-mvc-and-unit-testing-triangle

GenericRepository は、インスタンス化できない抽象クラスのようです。

http://msdn.microsoft.com/en-us/library/sf985hc5(v=vs.71).aspx

GenericRepository の派生クラスが必要です。つまり、

DepartmentRepository : GenericRepository<Department>
于 2012-07-20T03:48:31.110 に答える
0

つまり、フィールドをインターフェイス タイプとして宣言する必要があります。インターフェイスには、 のような名前を付けることができますIGenericRepository<T>。次に、クラスGenericRepository<T>はそのインターフェースを実装する必要があります。次に、クラスを IoC フレームワークに登録します。これにより、基本的にフレームワークに「このインターフェイスのインスタンスを要求するときは、そのクラスのインスタンスを提供してください」と指示されます。次に、次のようにします。

this.departmentRepository = InversionOfControl.Resolve<IGenericRepository<Department>>();

(resolve メソッドには のような署名がありますpublic T Resolve<T>())

于 2012-07-20T03:43:57.390 に答える