2014-12-20 4 views
3

나는 Orhcard 모듈에서 일하고 있는데 현재 사용자의 ID를 얻어야합니다. 나는 Google에서 찾을 수있는 모든 것을 시도했지만 아무 것도 효과가 없었습니다. CurrentUser는 항상 null입니다. 여기에 내가 시도한 최신 것들이있다WorkContext.CurrentUser가 항상 null 인 이유는 무엇입니까?

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 모두 null입니다. HttpContext.User에서 사용자 이름을 얻을 수 있지만 ID가 필요합니다. 사용자가 로그인했습니다. 다양한 계정과 계정 유형을 시도했습니다. 사용자와 함께 작동하는 다른 부분이 작동하고 WorkContext를 통해 사용자 이름을 표시 할 수 있는지 확인할 수 있습니다.

무엇이 누락 되었습니까?

+0

'WorkContext.CurrentUser'는 사용할 방법입니다. 작동하지 않으면 아직 알려지지 않은 시간을보고있는 것입니다. –

+0

DI를 통해 인스턴스화 된 클래스의 ctors에서 간단한 필드 할당보다 복잡한 논리를 사용하지 마십시오. 어떤 오류라도 사이트 전체가 날아갈 가능성이 높습니다. 그러나 그렇지 않은 경우에도 종속성 해결 프로세스가 느려집니다. 물론 대부분의 수업은 아직 완전히 완성되지 않았을 것입니다. –

+0

@Piotr 디 테스트에만 해당 –

답변

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를 잊어 버리는 이유가 그것이 생성자에서 작동하지 않는 이유입니다. 주입되었지만 그 상태에서는 사용할 수 없습니다. –

관련 문제