我在我的 ASP.Net MVC4 项目中使用我的自定义虚拟提供程序。我们将提供者称为 MyVirtualPathProvider。提供者在 OnApplicationStarted 方法中注册,如下所示:
HostingEnvironment.RegisterVirtualPathProvider(new MyVirtualPathProvider());
该方法是 Global.asax.cs 的一部分。最重要的是,我有以下内容:
public class MvcApplication : NinjectHttpApplication
现在,我想使用 [Inject] 属性来注入我的一项服务,就像这样:
[Inject]
public ILogger Logger { get; set; }
在自定义虚拟路径提供程序中,我重写了 GetFile 方法,我想在其中使用注入的 Logger 记录一些内容:
public override VirtualFile GetFile(string virtualPath)
{
...
Logger.Log(...);
不幸的是,Logger 为空,因此它不起作用。
我试图在自定义虚拟路径提供程序构造函数中将 Logger 作为参数传递,如下所示:
HostingEnvironment.RegisterVirtualPathProvider(new MyVirtualPathProvider(Kernel.Get<ILogger>()));
不幸的是,这不是要走的路,因为我有警告:“警告 CS0618:'Ninject.Web.Common.NinjectHttpApplication.Kernel' 已过时:'不要使用 Ninject 作为服务定位器'”
我做错了什么?请指教。