Tôi đang cố gắng tìm cách chính xác để tiêm đối tượng hiện tại của đối tượng UserAuthSession
(bắt nguồn từ Service2's AuthUserSession
) vào kho lưu trữ truy cập dữ liệu để chúng tự động cập nhật các trường theo dõi thay đổi trên các hoạt động chèn/cập nhật/xóa.Làm cách nào để tiêm ServiceStack AuthSession vào các lớp lưu trữ của tôi?
Nếu tôi là kho newing-up trong mã dịch vụ của tôi nó sẽ là không có trí tuệ, tôi sẽ chỉ làm:
var repo = new MyRepository(SessionAs<UserAuthSession>());
Tuy nhiên, các kho của tôi là tự động có dây (tiêm) vào các dịch vụ, nên UserAuthSession
phải được nắm lấy từ đâu đó trong lambda định nghĩa cho đăng ký sử dụng kho lưu trữ với container IOC, ví dụ:
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
}
}
}
Bây giờ, nhìn vào mã ServiceStack cho lớp Service
:
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;
}
Tôi có thể thấy rằng nó tìm kiếm phiên được lưu trong bộ nhớ cache dựa trên Request
và Response
hiện tại, nhưng những thứ đó không có sẵn cho tôi trong lambda.
Giải pháp là gì? Hay tôi đang tiếp cận vấn đề từ một góc hoàn toàn sai?
Quên đề cập đến mà tôi đang kiểm tra mã của tôi sử dụng một 'JsonServiceClient', KHÔNG bằng cách gọi phương thức dịch vụ trực tiếp. Vì vậy, tôi đã mong đợi 'HttpContext.Current' để có sẵn trong lambda, nhưng nó luôn luôn là null. –