从 Session_Start 呼叫服务
Call Service from Session_Start
我有一个 AuditService
我创建的看起来像:
public interface IAuditService
{
void Log(int userId, string obj, string action, string details);
}
在我的控制器中,我可以这样调用服务:
public class AccountController : BaseController
{
private readonly IAuditService _auditService;
public AccountController(IUnitOfWork unitOfWork, IAuditService auditService) : base(unitOfWork)
{
...
_auditService = auditService;
}
[HttpPost]
public ActionResult UserProfile(ProfileViewModel vm)
{
...
_auditService.Log(CurrentUser.UserId,"Account", "Edit", "details");
}
}
这工作正常,但我需要在用户登录时登录。在 Global.asax 文件中,我有一个 Session_start() 方法来获取登录用户。我还需要能够从这里调用 AuditService
。
protected void Session_Start(object sender, EventArgs e)
{
if (Request.IsAuthenticated)
{
var sid = System.Web.HttpContext.Current.Request.LogonUserIdentity.User.ToString();
using (var context = new SqlContext())
{
SystemUser user = context.SystemUsers.Where(u => u.UserSid == sid).FirstOrDefault();
if (user != null)
{
user.LastLogin = DateTime.Now;
context.SaveChanges();
}
}
}
}
关于我应该尝试什么有什么建议吗?我尝试了类似下面几行的操作,但出现 invalid argument
错误。
AuditService audit = new AuditService(DependencyResolver.Current.GetService<IAuditService>().Log);
audit.Log(user.UserId, "Account", "Login", "Successfull login");
由于您使用 Autofac 作为依赖项解析器,您可以使用以下方法获得对 IAuditService
实现的引用:
IAuditService audit = DependencyResolver.Current.GetService<IAuditService>();
然后调用它的方法:
audit.Log(user.UserId, "Account", "Login", "Successfull login");
我有一个 AuditService
我创建的看起来像:
public interface IAuditService
{
void Log(int userId, string obj, string action, string details);
}
在我的控制器中,我可以这样调用服务:
public class AccountController : BaseController
{
private readonly IAuditService _auditService;
public AccountController(IUnitOfWork unitOfWork, IAuditService auditService) : base(unitOfWork)
{
...
_auditService = auditService;
}
[HttpPost]
public ActionResult UserProfile(ProfileViewModel vm)
{
...
_auditService.Log(CurrentUser.UserId,"Account", "Edit", "details");
}
}
这工作正常,但我需要在用户登录时登录。在 Global.asax 文件中,我有一个 Session_start() 方法来获取登录用户。我还需要能够从这里调用 AuditService
。
protected void Session_Start(object sender, EventArgs e)
{
if (Request.IsAuthenticated)
{
var sid = System.Web.HttpContext.Current.Request.LogonUserIdentity.User.ToString();
using (var context = new SqlContext())
{
SystemUser user = context.SystemUsers.Where(u => u.UserSid == sid).FirstOrDefault();
if (user != null)
{
user.LastLogin = DateTime.Now;
context.SaveChanges();
}
}
}
}
关于我应该尝试什么有什么建议吗?我尝试了类似下面几行的操作,但出现 invalid argument
错误。
AuditService audit = new AuditService(DependencyResolver.Current.GetService<IAuditService>().Log);
audit.Log(user.UserId, "Account", "Login", "Successfull login");
由于您使用 Autofac 作为依赖项解析器,您可以使用以下方法获得对 IAuditService
实现的引用:
IAuditService audit = DependencyResolver.Current.GetService<IAuditService>();
然后调用它的方法:
audit.Log(user.UserId, "Account", "Login", "Successfull login");