0

我在我的 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 作为服务定位器'”

我做错了什么?请指教。

4

1 回答 1

0

您可能希望将日志记录视为一个横切关注点并利用环境上下文设计模式。在您不想使用常用类型污染构造函数的情况下(与您可能需要 DateTime 提供程序的方式相同),它可以提供帮助。如果您采用这种方法,您将避开您收到的警告,因为您不需要将类型注入路径提供程序。

于 2014-09-26T16:17:26.087 回答