4

asp.net mvcで作成されたWebアプリケーションがあり、Ninjectを使用してインターフェイスをバインドしています。

今のところ、私はこれを持っています:

// Db Context
kernel.Bind<DbContext>().To<DbEntities>().InRequestScope();

// Repositories - which are using instance of DbEntities
kernel.Bind<ICustomerRepository>().To<CustomerRepository>();
kernel.Bind<IProductRepository>().To<ProductRepository>();

// Services - which are using instances of Repositories
kernel.Bind<ICustomerService>().To<CustomerService>();
kernel.Bind<IProductService>().To<ProductService>();

同じWebリクエストで同じDbContextを使用したいので、RequestScopeのDbEntitiesにDbContextをバインドしています。その後、それを処分する必要があります。

しかし、他のバインディングはどうあるべきですか?デフォルトではどうですか?

たとえば、 (リクエストごとに1つ)IProductRepositoryのインスタンスがある場合、これも?DbContextInRequestScope()

IProductServiceのインスタンスがありますIProductRepository

バインディングはどのようにすべきですか?Webアプリケーションに適していますか?(そして私はサーバーのメモリを過負荷にしません)

4

2 に答える 2

3

MVCアプリケーションの場合、構成は問題ありません。デフォルトの一時スコープまたはリクエストスコープでリポジトリをバインドする場合、大きな違いはありません。@Markが一時スコープで述べたように、依存関係はバインドされたオブジェクトの新しいインスタンスとして注入されますが、トランザクションスコープではリクエストごとに1回作成されます。私はもう少しリクエストスコープを好み、リポジトリでリクエストごとのキャッシュを実行したい場合(たとえば)にそれをお勧めします。

于 2012-11-15T19:42:15.150 に答える
1

リポジトリはそのままにしておくことができます。IProductRepositoryデフォルトのスコープは、新しいインスタンスが必要になるたびに作成されるスコープです。

于 2012-11-15T09:33:42.660 に答える