2014-12-20 65 views
3

我正在使用Orhcard模块,我需要获取当前用户的ID。我尝试了所有可以在google上找到的东西,但都没有成功。 CurrentUser总是空。下面是我试过为什么WorkContext.CurrentUser始终为空?

public MyWidgetDriver(IWidgetService widgetService, 
      IAuthenticationService authenticationService,RequestContext requestContext, 
      IWorkContextAccessor workContextAccessor, IOrchardServices orchSvc) 
     { 

      var a = authenticationService.GetAuthenticatedUser(); 
      var b = orchSvc.WorkContext.CurrentUser; 
      var c = workContextAccessor.GetContext().CurrentUser; 

     } 

A,B & c全部空最新的东西。我可以从HttpContext.User获取用户名,但我需要该ID。用户已登录。我尝试过各种帐户和帐户类型。我可以看到与用户一起工作的其他部分正在工作,并且能够通过WorkContext显示用户的姓名。

我错过了什么?

+0

'WorkContext.CurrentUser'是要使用的方法。如果它不起作用,这意味着你正在查看尚未知道的时间。 –

+0

避免在通过DI实例化的类的ctors中放置比简单字段分配更复杂的逻辑。那里的任何错误很可能会打击整个网站。但即使不这样做 - 它会减缓依赖性解决过程。更何况大部分课程在这一点上还不会完全构建。 –

+0

@Piotr它仅用于测试di –

回答

4

它看起来像你试图从构造函数访问它。在使用它们之前,您需要实际正确地注入这些服务。所以...

private readonly IOrchardServices _orchardServices; 

public MyWidgetDriver(IOrchardServices orchardServices) { 
_orchardServices = orchardServices; 
} 

public DriverResult Display(...) { 
var b = _orchardServices.WorkContext.CurrentUser; 
var id = b.Id; 
} 
+0

就是这样。我一直忘记Orchard用户DI,这就是为什么它不在构造函数中工作。注入,但在该状态下不可用。 –