2014-12-20 12 views
3

Я работаю над модулем Orhcard, и мне нужно получить идентификатор текущего пользователя. Я пробовал все, что мог найти в 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; 

     } 

а, б & с всем нуль. Я могу получить имя пользователя из HttpContext.User, но мне нужен идентификатор. пользователь вошел в систему. Я пробовал различные учетные записи и типы учетных записей. Я вижу, что другие части, которые работают с пользователем, работают и могут показывать имя пользователя через WorkContext.

Что мне не хватает?

+0

'WorkContext.CurrentUser' - это метод использования. Если это не работает, это означает, что вы смотрите на время, когда оно еще не известно. –

+0

Избегайте более сложной логики, чем простые назначения полей в классах классов, которые создаются через DI. Любая ошибка там, скорее всего, повредит весь сайт. Но даже если это не так - это замедлит процесс разрешения зависимостей. Не говоря уже о том, что большинство классов пока не будут полностью построены. –

+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, поэтому он не работал в конструкторе. Впрыскивается, но недоступно в этом состоянии. –

Смежные вопросы