У меня есть существующее приложение, использующее последнюю сборку из версии 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 для чего-то подобного?
Я тоже это видел, но это с новым пакетом StructureMap.Web. Я посмотрю еще раз, как только у меня будет время попробовать его снова. –