首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Ninject自定义VirtualPathProvider

使用Ninject自定义VirtualPathProvider
EN

Stack Overflow用户
提问于 2014-09-17 23:13:09
回答 1查看 104关注 0票数 0

我在我的ASP.Net MVC4项目中使用我的自定义虚拟提供程序。让我们将提供程序称为MyVirtualPathProvider。提供程序在OnApplicationStarted方法中注册,如下所示:

代码语言:javascript
复制
HostingEnvironment.RegisterVirtualPathProvider(new MyVirtualPathProvider());

该方法是Global.asax.cs的一部分。在它的顶端,我有以下内容:

代码语言:javascript
复制
public class MvcApplication : NinjectHttpApplication

现在,我想使用Inject属性来注入我的一个服务,就像这样:

代码语言:javascript
复制
    [Inject]
    public ILogger Logger { get; set; }

在自定义虚拟路径提供程序中,我覆盖了GetFile方法,在该方法中,我希望使用注入的记录器记录一些内容:

代码语言:javascript
复制
     public override VirtualFile GetFile(string virtualPath)
     {
     ...
         Logger.Log(...);

不幸的是,记录器为空,因此无法工作。

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

代码语言:javascript
复制
HostingEnvironment.RegisterVirtualPathProvider(new MyVirtualPathProvider(Kernel.Get<ILogger>()));

不幸的是,这不是可行的方法,因为我得到警告:“警告对象:'Ninject.Web.Common.NinjectHttpApplication.Kernel‘已过时:’不要使用CS0618作为服务定位器‘”。

我做错了什么?请给我建议。

EN

回答 1

Stack Overflow用户

发布于 2014-09-27 00:17:26

您可能希望将日志记录视为一种横切关注点,并利用环境上下文设计模式。在你不想用通用类型污染构造器的情况下(就像你想要DateTime提供者的方式一样),它可以提供帮助。如果你使用这种方法,你会避开你得到的警告,因为你不需要将类型注入到路径提供者中。

  • http://blogs.msdn.com/b/ploeh/archive/2007/07/23/ambientcontext.aspx
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25894299

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档