IAuthSession的依赖注入解决了空会话

时间:2014-03-05 18:08:12

标签: servicestack

我成功使用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”添加到类中的最佳方法是什么?

1 个答案:

答案 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);
    }
}