ASP.Net MVC4 プロジェクトでカスタム仮想プロバイダーを使用しています。プロバイダーを MyVirtualPathProvider と呼びましょう。プロバイダーは、次のように OnApplicationStarted メソッドに登録されます。
HostingEnvironment.RegisterVirtualPathProvider(new MyVirtualPathProvider());
メソッドは Global.asax.cs の一部です。その上に、次のものがあります。
public class MvcApplication : NinjectHttpApplication
ここで、[Inject] 属性を使用して、次のようにサービスの 1 つを挿入したいと思います。
[Inject]
public ILogger Logger { get; set; }
カスタム仮想パス プロバイダーで、注入された Logger を使用して何かをログに記録したい GetFile メソッドをオーバーライドしました。
public override VirtualFile GetFile(string virtualPath)
{
...
Logger.Log(...);
残念ながら、Logger は null であるため、機能しません。
次のように、ロガーをカスタム仮想パスプロバイダーコンストラクターのパラメーターとして渡そうとしました。
HostingEnvironment.RegisterVirtualPathProvider(new MyVirtualPathProvider(Kernel.Get<ILogger>()));
残念ながら、「警告 CS0618: 'Ninject.Web.Common.NinjectHttpApplication.Kernel' は廃止されました: 'サービス ロケータとして Ninject を使用しないでください'」という警告があるため、これは進むべき道ではありません。
私は何を間違えましたか?お知らせ下さい。