gpt4 book ai didi

servicestack - 如何将 ServiceStack AuthSession 注入(inject)到我的存储库类中?

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

我正在努力寻找注入(inject) UserAuthSession 的当前实例的正确方法。对象(从 ServiceStack 的 AuthUserSession 派生)到我的数据访问存储库中,以便它们在插入/更新/删除操作时自动更新更改跟踪字段。

如果我在我的服务代码中更新存储库,那将是一件轻而易举的事,我会这样做:

var repo = new MyRepository(SessionAs<UserAuthSession>());

但是,我的存储库是自动连接(注入(inject))到服务中的,所以 UserAuthSession必须从为存储库注册到 IOC 容器而定义的 lambda 中的某个位置获取,例如:
public class AppHost : AppHostBase
{
public override void Configure(Container container)
{
container.Register<ICacheClient>(new MemoryCacheClient());
container.Register<IRepository>(c =>
{
return new MyRepository(**?????**); <-- resolve and pass UserAuthSession
}
}
}

现在,查看 Service 的 ServiceStack 代码类(class):
    private object userSession;
protected virtual TUserSession SessionAs<TUserSession>()
{
if (userSession == null)
{
userSession = TryResolve<TUserSession>(); //Easier to mock
if (userSession == null)
userSession = Cache.SessionAs<TUserSession>(Request, Response);
}
return (TUserSession)userSession;
}

我可以看到它根据当前 Request 查找缓存 session 和 Response ,但这些在 lambda 中对我不可用。

解决方案是什么?还是我从一个完全错误的角度来解决问题?

最佳答案

another StackOverflow post 中找到答案它将根据请求构建的 session 存储在请求/线程范围的 ItemsServiceStack.Common.HostContext 的字典. .

我的 AppHost.Configure()现在有以下代码:

// Add a request filter storing the current session in HostContext to be
// accessible from anywhere within the scope of the current request.
RequestFilters.Add((httpReq, httpRes, requestDTO) =>
{
var session = httpReq.GetSession();
HostContext.Instance.Items.Add(Constants.UserSessionKey, session);
});

// Make UserAuthSession resolvable from HostContext.Instance.Items.
container.Register<UserAuthSession>(c =>
{
return HostContext.Instance.Items[Constants.UserSessionKey] as UserAuthSession;
});

// Wire up the repository.
container.Register<IRepository>(c =>
{
return new MyRepository(c.Resolve<UserAuthSession>());
});

关于servicestack - 如何将 ServiceStack AuthSession 注入(inject)到我的存储库类中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17601042/

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