小编Dav*_*ali的帖子

如何直接从ConfigureServices方法注入HttpContextAccessor

我的目标是根据我将要工作的环境设置用户名字符串,该字符串必须是:

  • 用于开发和登台环境的任意字符串
  • 正在HttpContext.User.Identity.Name生产中。

这是因为我必须能够模拟不同类型的用户,并且我通过调用使用此用户名字符串作为参数FindByIdAsync的自定义实现上的方法来实现UserIdentity此目的,如下所示:

public class HomeController : Controller
{
    UserManager<AppUser> userManager;
    AppUser connectedUser;

    public HomeController(UserManager<AppUser> usrMgr, IContextUser ctxUser)
    {
        connectedUser = usrMgr.FindByNameAsync(ctxUser.ContextUserId).Result;
    }
}
Run Code Online (Sandbox Code Playgroud)

appsettings.{environment}.json我开始为三个常用的开发、登台和生产环境创建三个文件;development 和 staging .json 文件都具有以下配置:

...
"Data": {
  ...
  "ConnectedUser" : "__ADMIN"
}
...
Run Code Online (Sandbox Code Playgroud)

而生产环境配置文件中没有这个key。

我创建了一个简单的界面

public interface IContextUser
{
    public string ContextUserId { get; }
}
Run Code Online (Sandbox Code Playgroud)

及其实施:

public class ContextUser : IContextUser
{
    string contextUser;
    IHttpContextAccessor contextAccessor;

    public ContextUser(IHttpContextAccessor ctxAccessor, string ctxUser = null)
    { …
Run Code Online (Sandbox Code Playgroud)

dependency-injection asp.net-core

3
推荐指数
1
解决办法
6898
查看次数

标签 统计

asp.net-core ×1

dependency-injection ×1