我很努力地找到正確的方法將UserAuthSession
對象(從ServiceStack的AuthUserSession
派生)的當前實例注入我的數據訪問存儲庫,以便它們自動更新插入/更新/刪除操作中的更改跟蹤字段。如何將ServiceStack AuthSession注入到我的存儲庫類中?
如果我在我的服務代碼newing機庫這將是一個沒有腦子,我只想做:
var repo = new MyRepository(SessionAs<UserAuthSession>());
然而,我的版本庫自動有線(注入)的服務,所以UserAuthSession
必須從某處存儲庫與IOC容器的註冊規定的拉姆達抓起,如:
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代碼:
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
和Response
緩存的會議,但這些都沒有提供給我的拉姆達。
解決方案是什麼?還是我從一個完全錯誤的角度來處理這個問題?
忘了提,我在測試中使用'JsonServiceClient'我的代碼,而不是通過直接調用服務方法。所以我期待'HttpContext.Current'在lambda中可用,但它始終爲空。 –