Ninject を使用する MVC 5 アプリケーションがあり、それに Hangfire を追加しています。
Ninject を追加したときはNinjectWebCommon
、構成が簡単な nuget パッケージを使用しました。したがって、今のところ Ninject はNinjectWebCommon
、標準カーネルを作成してバインディングを追加するクラスを通じて構成されています。
さらに、カーネルの作成時にロードするカスタム モジュールをいくつか作成しました。
private static IKernel CreateKernel() {
var kernel = new StandardKernel( new MyCustomModule() );
try {
kernel.Bind<Func<IKernel>>().ToMethod( ctx => () => new Bootstrapper().Kernel );
kernel.Bind<IHttpModule>().To<HttpApplicationInitializationHttpModule>();
RegisterServices( kernel );
return kernel;
}
catch {
kernel.Dispose();
throw;
}
}
Ninject Web Common はWebActivatorEx
クラスを通じて登録されます
[assembly: WebActivatorEx.PreApplicationStartMethod( typeof( MyProject.Web.NinjectWebCommon ), "Start" )]
[assembly: WebActivatorEx.ApplicationShutdownMethodAttribute( typeof( MyProject.Web.NinjectWebCommon ), "Stop" )]
この問題は、Hangfire を作成して Ninject 構成を表示する方法に関連しています。パッケージを見れHangfire.Ninject
ば読める
このパッケージは、IGlobalConfiguration インターフェイスの拡張メソッドを提供します。
var kernel = new StandardKernel();
GlobalConfiguration.Configuration.UseNinjectActivator(kernel);
今私の質問は次のとおりです。
- このインターフェイスのため
IGlobalConfiguration
、Hangfire Ninject 構成を OWIN スタートアップ メソッド内 (Hangfire 構成が既に配置されている場所) に追加する必要があります。現在の Ninject カーネル (NinjectWebCommon が構成したもの) を取得するにはどうすればよいですか? - 実行順序はどうですか?
WebActivatorEx
実行は OWIN の起動前ですか、それとも起動後ですか? - 構成を 2 回実行しようとするとどうなりますか?
より一般的には、2 つの間で Ninject 構成を共有するにはどうすればよいですか?