2013-03-19 2 views
1

Я использую SocialBootstrapApi ServiceStack и содержит класс CustomUserSession, который я могу использовать для переопределения метода OnRegistered. Я хочу переопределить его, потому что я пытаюсь получить информацию о регистрации, чтобы я мог опубликовать событие, зарегистрированное новым пользователем. Этот обработчик предоставляет экземпляр RegistrationService, который обрабатывал регистрацию, но не имеет ничего о самом запросе регистрации или результирующем экземпляре UserAuth. Например, я хотел бы получить адрес электронной почты, используемый для регистрации.Переопределение IAuthSession OnRegistered handler

public override void OnRegistered(IServiceBase registrationService) 
    { 
     base.OnRegistered(registrationService); 

     // Ideally, I could do get the registered user's primary e-mail address from the UserAuth instance. 
     var primaryEmail = ((RegistrationService) registrationService) 
      .UserAuthRepo 
      .GetUserAuth(this, null) //<--- 'this' is a mostly empty session instance 
      .PrimaryEmail; 
    } 

Это, конечно, не работает, так как экземпляр сеанса я использую для вызова GetUserAuth не содержит необходимую информацию аутентификации, чтобы быть полезными для поиска информации об аутентификации пользователя. Поэтому GetUserAuth возвращает null, как и следовало ожидать. Итак, как мне получить эту информацию? Было ли неправильным оформление для обработчика OnRegistered экземпляра UserAuth, созданного RegistrationService?

public interface IAuthSession 
    { 
     ... 
     void OnRegistered(IServiceBase registrationService, UserAuth userAuth); // <-- new signature 
     ... 
    } 

Это было бы удобно! :)

Возможно, есть еще один способ сделать это?

Заранее спасибо.

ответ

1

Итак, как мне получить эту информацию?

У вас должен быть доступ ко всем данным запроса на регистрацию через службу регистрации. Вы просто должны сделать немного покопаться и литье ...

public override void OnRegistered(IServiceBase registrationService) 
{ 
    base.OnRegistered(registrationService); 

    var requestContext = (HttpRequestContext)registrationService.RequestContext; 
    var dto = ((Registration)requestContext.Dto); 
    var primaryEmail = dto.Email; 
} 

Было бы неправильно дизайн для OnRegistered обработчик передается экземпляр USERAUTH созданный RegistrationService?

Я оставлю проектные решения профессионалам. Вышеприведенный код должен работать. Кастинг кажется немного уродливым, но все необходимые данные есть.

Мне не нравится взламывать SS, поэтому я решил выбрать пользовательскую информацию об аутентификации из коллекции UserAuth по dto.UserName

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