繁体   English   中英

有没有办法让ClassLibrary获得会话值的简单方法?

[英]Is there a way for a simple way for ClassLibrary to get Session Value?

我有一个外部ClassLibrary项目,需要从Main Project中的HomeController获取会话值。 有没有一种简单的方法来实现这一目标?

或者是否有将HomeController中的值传递给外部ClassLibrary的替代方法?

您可以使用IHttpContextAccessor

对于需要访问HttpContext的其他框架和自定义组件,建议的方法是使用内置依赖项注入容器注册依赖项。 依赖注入容器将IHttpContextAccessor提供给任何在其构造函数中将其声明为依赖项的类。

 public void ConfigureServices(IServiceCollection services) { services.AddMvc() .SetCompatibilityVersion(CompatibilityVersion.Version_2_1); services.AddHttpContextAccessor(); services.AddTransient<IUserRepository, UserRepository>(); } 

在以下示例中:

  • UserRepository声明它对IHttpContextAccessor的依赖。
  • 当依赖注入解析依赖关系链并创建UserRepository实例时,将提供依赖关系。

 public class UserRepository : IUserRepository { private readonly IHttpContextAccessor _httpContextAccessor; public UserRepository(IHttpContextAccessor httpContextAccessor) { _httpContextAccessor = httpContextAccessor; } public void LogCurrentUser() { var username = _httpContextAccessor.HttpContext.User.Identity.Name; service.LogAccessRequest(username); } } 

别忘了添加services.AddHttpContextAccessor(); 使依赖注入工作。

单一责任原则规定一个班级应该只做一件事。 虽然你可以注入类似IHttpContextAccessor东西,然后要求类知道像HttpContextSession这样的概念,它首先在Web环境中使用它等等。

正确的方法是注入或传递 如果类需要来自会话变量的特定值,请访问控制器中该逻辑实际所属的会话,然后仅将会话中的值传递给外部类。

如果你使用Abp模板,Abp应用程序服务ApplicationService已经包含属性AbpSession ,你可以继承这个类。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM