使用Ninject自定义VirtualPathProvider

时间:2014-09-17 15:13:09

标签: asp.net-mvc-4 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.Kernel'已过时:'不要将Ninject用作服务定位器'”

我做错了什么?请指教。

1 个答案:

答案 0 :(得分:0)

您可能希望将日志记录视为一个跨领域的问题,并使用Ambient Context设计模式。如果您不想使用通常使用的类型污染构造函数(与您可能需要DateTime提供程序的方式相同),它可以提供帮助。如果您采用这种方法,那么您可以采取相应的警告,因为您不需要将类型注入路径提供程序。