Ninject.MVC3 - NinjectWebCommon RegisterServices System.Web.HttpContext.Current为null

时间:2014-06-06 08:56:16

标签: asp.net asp.net-mvc asp.net-mvc-3 ninject

我正在使用Ninject.MVC3 NuGetNinjectWebCommon RegisterServices。这是我的服务:

public class MyService : IMyService
{
    private string someDir;

    public MyService(string someDir)
    {
        this.someDir = someDir;
    }
    ...
}

其中一个服务有一个构造函数参数,我想从Server.MapPath注入一个值,但System.Web.HttpContext.Current为null。

public static class NinjectWebCommon 
{
    private static void RegisterServices(IKernel kernel)
    {
        var server = System.Web.HttpContext.Current.Server;

        kernel
            .Bind<IMyService>()
            .To<MyService>()
            .WithConstructorArgument("someDir", server.MapPath("~/someDir/"));
     }
     ...
}

我猜HttpContext.Current是null因为ASP.NET还没有完成它需要做的事情,但我的问题是

我可以在这里使用构造函数注入,还是需要一些其他方式注入此路径,如Init方法或方法注入?

2 个答案:

答案 0 :(得分:3)

在应用程序启动时调用RegisterServices,甚至在创建任何上下文之前。当工作进程开始时,它也只执行一次。

我没有测试过这个,所以我不确定它是否在内部依赖于HttpContext,但你可能会尝试

HostingEnvironment.MapPath("~/someDir/");

查看反编译的源代码,它看起来应该可以正常工作。

答案 1 :(得分:0)

您可以将完整路径存储在web.config / app设置中,然后为每个环境都有一个配置转换来更改它。