リポジトリパターンを使用してNinjectで構成されたMVC 3ソリューションがあります。私のバインディングの一部を以下に示します。コンソールアプリケーション用のNinjectの設定とMVCアプリケーション用の既存のリポジトリの活用
kernel.Bind<IDatabaseFactory>().To<DatabaseFactory>().InRequestScope();
kernel.Bind<IUnitOfWork>().To<UnitOfWork>().InRequestScope();
kernel.Bind<IMyRepository>().To<MyRepository>().InRequestScope();
kernel.Bind<IMyService>().To<MyService>().InRequestScope();
kernel.Bind<ILogging>().To<Logging>().InSingletonScope();
は、私も自分のソリューションにコンソールアプリケーションを追加したと私は同じリポジトリとサービスを活用したいです。マイコンソールのコードがどのように見える
kernel.Bind<IDatabaseFactory>().To<DatabaseFactory>().InSingletonScope();
kernel.Bind<IUnitOfWork>().To<UnitOfWork>().InSingletonScope();
kernel.Bind<IMyRepository>().To<MyRepository>().InSingletonScope();
kernel.Bind<IMyService>().To<MyService>().InSingletonScope();
kernel.Bind<ILogging>().To<Logging>().InSingletonScope();
:
static void Main(string[] args)
{
IKernel kernel = new StandardKernel(new IoCMapper());
var service = kernel.Get<IMyService>();
var logger = kernel.Get<ILogging>();
... do some processing here
}
これはうまく動作しますが、私はtは私はコンソールアプリケーション用に正しくNinjectを設定していていることを確認してくださいしたいコンソールアプリケーションのための私のNinject構成は次のようになります。コンソールアプリケーションのすべてのバインディングにInSingletonScope()を使用するのは正しいですか?私はそれを異なって構成するべきですか?
コンソールアプリケーションには簡単なループがあり、いくつかのURLを繰り返して内容をスクラップし、処理してサービスに渡してデータベースに保存します。非同期リクエストがないので、これでシングルスレッドになると思いますか?このシナリオに最も適したアプローチはどれですか? – Thomas
毎回同じデータベース接続を使用する場合は、InSingletonScopeまたはInRequestScopeを使用できます。同期操作のためにはうまくいくはずです。何らかの理由でデータベースサービスへのリクエストが非同期(UoWシナリオでは一般的)になった場合、同時に2つの異なるコールで使用されているデータベース接続に関する問題が発生する可能性があります。これは数ヶ月前に起こったことで、何が起きているのか理解しようとしています。 –
「データベースサービスへのリクエストが非同期になる」と言うと、私のコードを実際に "非同期にする"これは "フードの下で"発生する可能性がありますか? – Thomas