Ich habe eine vorhandene Anwendung mit dem letzten Build aus der 2.x-Version von Structuremap, und es funktioniert einwandfrei. StructureMap 3 ist gerade erst live gegangen und ich habe mich entschieden, es zu aktualisieren und zu sehen, wie es läuft.Abhängigkeitsinjektion des aktuellen Benutzers in einer MVC-Anwendung mithilfe von StructureMap3
Aber egal was ich tue, ich kann nicht scheinen, um es richtig zu lösen, den aktuellen Benutzer. Ich bin nicht sicher, ob es versucht, die Abhängigkeiten zu früh in der Lebensdauer der App zu erstellen oder was der Deal sein könnte. Da die Veröffentlichung so aktuell ist, gibt es so ziemlich keine Informationen, die ich bisher für nützlich erachtet habe.
Die Zeile, die die Abhängigkeit registriert.
For<HttpContextBase>().Use(() => new HttpContextWrapper(HttpContext.Current));
For<ICurrentUser>().HybridHttpOrThreadLocalScoped().Use(x => GetCurrentUser(x));
Meine Methode der Abhängigkeit
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);
}
}
Mein ICurrentUser Schnittstelle
public interface ICurrentUser
{
Guid UserId { get; }
string UserName { get; }
}
Die Linie GetIdentityId()
im Grunde die Logik nur eine Erweiterung Methode ruft zu lösen Verpackung für den Benutzer-ID zu überprüfen, gespeichert auf die Identität als Anspruchsposition vom Typ ClaimTypes.NameIdentifier
, Behandlung von Nullen und Koaleszenz zu Guid, etc.
Hat schon jemand anderes versucht, StructureMap3 in einer Webapp für so etwas zu verwenden?
Ich sah das auch, aber das ist mit dem neuen StructureMap.Web Paket installiert. Ich werde noch einmal nachsehen, sobald ich Zeit habe, es noch einmal auszuprobieren. –