带有Ninject的自定义VirtualPathProvider



我正在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为null,因此无法工作。

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

HostingEnvironment.RegisterVirtualPathProvider(new MyVirtualPathProvider(Kernel.Get<ILogger>()));

不幸的是,这不是一条路,因为我有警告:"警告CS0618:'Ninject.Web.Common.NinjectHttpApplication.Cernel'已经过时:'不要将Ninject用作服务定位器'"

我做错了什么?请告知。

您可能希望将日志记录视为一个跨领域的问题,并使用环境上下文设计模式。如果您不想用通常使用的类型污染构造函数(就像您可能想要DateTime提供程序一样),它会有所帮助。如果你采用这种方法,你会避开警告,因为你不需要向路径提供程序注入类型。

  • http://blogs.msdn.com/b/ploeh/archive/2007/07/23/ambientcontext.aspx

相关内容

  • 没有找到相关文章

最新更新