作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在努力寻找注入(inject) UserAuthSession
的当前实例的正确方法。对象(从 ServiceStack 的 AuthUserSession
派生)到我的数据访问存储库中,以便它们在插入/更新/删除操作时自动更新更改跟踪字段。
如果我在我的服务代码中更新存储库,那将是一件轻而易举的事,我会这样做:
var repo = new MyRepository(SessionAs<UserAuthSession>());
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 存储在请求/线程范围的 Items
中ServiceStack.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/
我是一名优秀的程序员,十分优秀!