我在ASP.NET Core项目中有一个用于RazorViewEngineOptions的自定义IFileProvider。是否可以在IFileProvider中的GetFileInfo中访问请求对象?
void Update()
{
if (Input.GetKeyDown(KeyCode.Return))
{
Debug.Log("returning to checkpoint");
tf.position = Checkpoint.spawnPoint.position;
}
}
Startup.cs:
public class DBViewProvider : IFileProvider
{
public IFileInfo GetFileInfo(string subpath)
{
// access to Request here?
}
}
DBViewProvider只有一个全局实例,所以我无法为每个请求注入IHttpContextAccessor。
答案 0 :(得分:0)
IHttpContextAccessor使用线程本地,你不需要为每个请求注入一个。
答案 1 :(得分:0)
这就是我现在最终要做的事情。
创建一个辅助类来保存静态IServiceProvider。
public static class MyServiceLocator
{
public static IServiceProvider ServiceProvider;
public static void Init(IServiceProvider provider)
{
ServiceProvider = provider;
}
}
在Startup.cs中我初始化了ServiceProvider:
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, IServiceProvider serviceProvider)
{
MyServiceLocator.Init(serviceProvider);
}
在我的IFileProvider中,我得到了IHttpContextAccessor:
using Microsoft.Extensions.DependencyInjection;
...
public IFileInfo GetFileInfo(string subpath)
{
IHttpContextAccessor httpContextAccessor = MyServiceLocator.ServiceProvider.GetService<IHttpContextAccessor>();
}