[英]Is there a way for a simple way for ClassLibrary to get Session Value?
我有一个外部ClassLibrary项目,需要从Main Project中的HomeController获取会话值。 有没有一种简单的方法来实现这一目标?
或者是否有将HomeController中的值传递给外部ClassLibrary的替代方法?
对于需要访问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
东西,然后要求类知道像HttpContext
, Session
这样的概念,它首先在Web环境中使用它等等。
正确的方法是注入或传递值 。 如果类需要来自会话变量的特定值,请访问控制器中该逻辑实际所属的会话,然后仅将会话中的值传递给外部类。
如果你使用Abp模板,Abp应用程序服务ApplicationService
已经包含属性AbpSession
,你可以继承这个类。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.