2014-04-03 6 views
6

У меня есть существующее приложение, использующее последнюю сборку из версии 2.x Structuremap и отлично работает. StructureMap 3 недавно вышла в эфир, и я решил попробовать обновиться и посмотреть, как это происходит.Зависимость впрыска текущего пользователя в приложении MVC с использованием StructureMap3

Однако независимо от того, что я делаю, я не могу заставить его правильно разрешить текущего пользователя. Я не уверен, что он пытается построить зависимости слишком рано на протяжении жизни приложения или что может быть сделка. Потому что релиз настолько недавний, там почти нет никакой информации, которая, как мне показалось, пригодится.

Линия, регистрирующая зависимость.

For<HttpContextBase>().Use(() => new HttpContextWrapper(HttpContext.Current)); 
For<ICurrentUser>().HybridHttpOrThreadLocalScoped().Use(x => GetCurrentUser(x)); 

Мой метод для разрешения зависимости

private ICurrentUser GetCurrentUser(IContext context) 
    { 
     try 
     { 
      var httpContext = context.GetInstance<HttpContextBase>(); 
      if (httpContext == null) return null; 
      if (httpContext.User == null) return null; 
      var user = httpContext.User; 
      if (!user.Identity.IsAuthenticated) return null; 

      var personId = user.GetIdentityId().GetValueOrDefault(); 
      return new CurrentUser(personId, user.Identity.Name); 
     } 
     catch (Exception ex) 
     { 
      context.GetInstance<ILogger>().Error("Error trying to determine the current user.", ex); 
      throw new Exception("Error trying to determine the current user.", ex); 
     } 
    } 

Мой интерфейс ICurrentUser

public interface ICurrentUser 
{ 
    Guid UserId { get; } 
    string UserName { get; } 
} 

Линия вызова GetIdentityId() в основном только метод расширения обертывание логики для проверки UserId, хранящейся на Идентичность в качестве предмета претензии типа ClaimTypes.NameIdentifier, обращение с нулями и коалесценция для Guid и т. д.

Кто-нибудь еще пытался использовать StructureMap3 в webapp для чего-то подобного?

ответ

1

Попав в эту проблему самостоятельно, кажется, что каждая веб-связь, связанная с StructureMap, была перенесена в отдельный пакет Nuget под названием StructureMap.Web, который может быть found here.

Я предполагаю, что это потому, что StructureMap 3 теперь является PLC (Portalble Class Library), поэтому перемещение его в отдельный пакет имеет смысл.

Как только вы включите этот пакет, все должно продолжать работать как обычно.

+0

Я тоже это видел, но это с новым пакетом StructureMap.Web. Я посмотрю еще раз, как только у меня будет время попробовать его снова. –

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