gpt4 book ai didi

asp.net - 使用 StructureMap3 在 MVC 应用程序中注入(inject)当前用户的依赖项

转载 作者:行者123 更新时间:2023-12-04 15:57:57 25 4
gpt4 key购买 nike

我有一个使用 2.x 版 Structuremap 的最后一个构建的现有应用程序,它工作正常。 StructureMap 3 最近刚刚上线,我决定尝试对其进行更新,看看效果如何。

但是,无论我做什么,我似乎都无法正确解析当前用户。我不确定它是否试图在应用程序的生命周期中过早地构建依赖关系,或者交易可能是什么。由于发布时间如此之近,因此几乎没有我发现任何有用的信息。

注册依赖的行。

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()的线路基本上只是一个扩展方法,它包装了逻辑以检查存储在 Identity 上的 UserId 作为 ClaimTypes.NameIdentifier 类型的声明项,处理空值并合并到 Guid 等。

有没有其他人尝试在 web 应用程序中使用 StructureMap3 来完成类似的事情?

最佳答案

我自己也遇到了这个问题,似乎 StructureMap 中的每个相关 Web 都已被移动到一个名为 StructureMap.Web 的单独 Nuget 包中。可以是 found here .

我认为这是因为 StructureMap 3 现在与 PLC(可移植类库)兼容,因此将其移动到单独的包中是有意义的。

包含该软件包后,一切都应继续正常工作。

关于asp.net - 使用 StructureMap3 在 MVC 应用程序中注入(inject)当前用户的依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22846324/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com