我有一个外部ClassLibrary项目,需要从Main Project中的HomeController中获取会话值设置。 有没有简单的方法可以做到这一点?
或者是否可以将值从HomeController传输到外部ClassLibrary?
答案 0 :(得分:2)
您可以使用IHttpContextAccessor
class
对于需要访问以下内容的其他框架和自定义组件 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();
来使依赖项注入正常工作。
答案 1 :(得分:2)
单一责任原则规定,一个类应该只做一件事。尽管您可以注入类似IHttpContextAccessor
的东西,然后要求该类具有HttpContext
,Session
之类的概念知识,以及它首先是在Web环境中使用的事实,等等。
正确的方法是注入或传递值。如果该类需要会话变量中的特定值,请在该逻辑实际所属的控制器中访问该会话,然后仅将会话中的值传递给您的外部类。
答案 2 :(得分:-1)
如果您使用Abp模板,则Abp应用程序服务For example:
T1:id | t2_id
__________
1 | 30
2 | 24
. | _
. | _
90 | 80
T2: id
____
1
2
.
.
90
已包含属性ApplicationService
,则您可以继承此类。