我正在使用Ninject.MVC3 NuGet和NinjectWebCommon 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方法或方法注入?
答案 0 :(得分:3)
在应用程序启动时调用RegisterServices,甚至在创建任何上下文之前。当工作进程开始时,它也只执行一次。
我没有测试过这个,所以我不确定它是否在内部依赖于HttpContext,但你可能会尝试
HostingEnvironment.MapPath("~/someDir/");
查看反编译的源代码,它看起来应该可以正常工作。
答案 1 :(得分:0)
您可以将完整路径存储在web.config / app设置中,然后为每个环境都有一个配置转换来更改它。