Asp.net mvc 4 使用Ninject的自定义VirtualPathProvider

Asp.net mvc 4 使用Ninject的自定义VirtualPathProvider,asp.net-mvc-4,ninject,virtualpathprovider,Asp.net Mvc 4,Ninject,Virtualpathprovider,我正在ASP.NETMVC4项目中使用自定义虚拟提供程序。让我们调用提供程序MyVirtualPathProvider。提供程序在OnApplicationStarted方法中注册,如下所示: HostingEnvironment.RegisterVirtualPathProvider(new MyVirtualPathProvider()); [Inject] public ILogger Logger { get; set; } HostingEnvironment.Re

我正在ASP.NETMVC4项目中使用自定义虚拟提供程序。让我们调用提供程序MyVirtualPathProvider。提供程序在OnApplicationStarted方法中注册,如下所示:

HostingEnvironment.RegisterVirtualPathProvider(new MyVirtualPathProvider());
    [Inject]
    public ILogger Logger { get; set; }
HostingEnvironment.RegisterVirtualPathProvider(new MyVirtualPathProvider(Kernel.Get<ILogger>()));
该方法是Global.asax.cs的一部分。在其顶部,我有以下内容:

public class MvcApplication : NinjectHttpApplication
现在,我想使用[Inject]属性来注入我的一项服务,如下所示:

HostingEnvironment.RegisterVirtualPathProvider(new MyVirtualPathProvider());
    [Inject]
    public ILogger Logger { get; set; }
HostingEnvironment.RegisterVirtualPathProvider(new MyVirtualPathProvider(Kernel.Get<ILogger>()));
在自定义虚拟路径提供程序中,我已重写了GetFile方法,在该方法中,我希望使用注入的记录器记录一些内容:

     public override VirtualFile GetFile(string virtualPath)
     {
     ...
         Logger.Log(...);
不幸的是,记录器为空,因此无法工作

我尝试将记录器作为参数传递到自定义虚拟路径提供程序构造函数中,如下所示:

HostingEnvironment.RegisterVirtualPathProvider(new MyVirtualPathProvider());
    [Inject]
    public ILogger Logger { get; set; }
HostingEnvironment.RegisterVirtualPathProvider(new MyVirtualPathProvider(Kernel.Get<ILogger>()));
不幸的是,这不是解决问题的办法,因为我有警告:警告CS0618:“Ninject.Web.Common.NinjectHttpApplication.Kernel”已经过时:“不要将Ninject用作服务定位器”


我做错了什么?请告知。

您可能希望将日志记录视为一个交叉关注点,并利用环境上下文设计模式。当您不想用一个常用类型污染构造函数时,它可以提供帮助,就像您可能需要DateTime提供程序一样。如果使用这种方法,您将避开得到的警告,因为您不需要将类型注入到路径提供程序中