我成功使用ServiceStack的凭据身份验证以及自定义AuthUserSession。我无法解决的是如何在通过Funq注入依赖项的类中使用它。
我有几个“Business”类依赖于Funq将DAL依赖注入到它们中,这非常有效。
但是,在DAL中,我显然希望使用当前登录的用户ID标记数据库字段,例如“CreatedBy”和“ModifiedBy”。因此,我在DAL中创建一个构造函数参数来接收AuthUserSession。
在Global.asax中,有以下几行:
//authentication
Plugins.Add(new AuthFeature(() => new MyAuthUserSession(),
new IAuthProvider[] { new MyCredentialsAuthProvider() }));
无论我如何使用funq注册MyAuthUserSession,它都会解析为一个没有会话信息的实例。
container.Register<IAuthSession>(new MyAuthUserSession());
或
container.Register(new MyAuthUserSession());
简而言之;通过构造函数注入将“当前用户ID”添加到类中的最佳方法是什么?
答案 0 :(得分:1)
UserSessions不是从IOC解决的依赖关系,因此永远不应该在IOC中注册,这将毫无意义并导致它们实际工作的混淆。
它们是在运行时使用随每个HTTP请求传入的客户端Cookie从Cache中水合的模型。 Session wiki提供了有关Sessions如何在ServiceStack中工作的更多信息。
可以使用base.SessionAs<T>
方法在ServiceStack中解析自定义类型用户会话,例如:
public class MyService : Service
{
public MyDependencyThatUsesUserSession MyDep { get; set; }
public object Any(Request request)
{
MyAuthUserSession mySession = base.SessionAs<MyAuthUserSession>();
return MyDep.Execute(mySession, request.Id);
}
}