【发布时间】:2022-03-23 08:01:45
【问题描述】:
我正在开发一个有两个项目的应用程序:
- 核心 - 使用存储库模式和域驱动设计来容纳数据访问层
-
UI - 使用 ASP.Net MVC。目前,我可以通过 User 属性在 UI 控制器中获取当前登录用户的信息(id、姓名等),如下所示:
using Microsoft.AspNet.Identity; public class ExamController : Controller { IExaminationRepository _repository; public ExamController() { _repository = RepositoryFactory.Get<IExaminationRepository>(); } [HttpPost] [Authorize(Roles = "Examiner")] public ActionResult Create(ExamViewModel viewModel) { try { ExaminationDomain domain = Mapper.Map<ExamViewModel, ExaminationDomain>(viewModel); //TODO: Move this to the repository domain.AuthorId = User.Identity.GetUserId(); _repository.Add(domain); return RedirectToAction("Index"); } catch { return View(); } } }
我想将这一行:domain.AuthorId = User.Identity.GetUserId(); 移动到我的存储库具体实现中,如下所示:
using Microsoft.AspNet.Identity;
using System.Security.Principal;
internal class ExaminationRepository
{
public DBEntities context;
public IPrincipal User;
public ExaminationRepository(DBEntities context)
{
this.context = context;
//I'd like to instantiate User property here:
this.User = "not sure what to instantiate with";
}
public void Add(ExaminationDomain domain)
{
Examination newExam = Mapper.Map<ExaminationDomain, Examination>(domain);
newExam.AuthorId = User.Identity.GetUserId();
newExam.CreatedBy = User.Identity.Name;
newExam.CreatedDate = DateTime.Now;
context.Examinations.Add(newExam);
context.SaveChanges();
}
但我不确定在构造函数中将 User 属性实例化为什么。我已经阅读了一些使用 WindowsIdentity.GetCurrent().User 而不是创建用户属性的建议,但这不包含用户 ID,仅包含用户名。
关于获取用户信息还有其他建议吗?
非常感谢您对此提供的帮助..
谢谢,
【问题讨论】:
-
@PW..不,我想它不可能在 Reposiroty 类中检索到该用户名值
标签: c# asp.net-mvc repository-pattern