2014-03-05 131 views
2

我成功使用ServiceStack的凭证身份验证以及自定义的AuthUserSession。我无法解决的是如何在通过Funq注入依赖关系的类中使用它。依赖注入IAuthSession解决空会话

我有几个“商业”类,它们依赖于Funq将DAL依赖注入到它们中,这很好地起作用。

但是,在DAL中,我显然希望使用当前登录的用户标识标记数据库字段,例如“CreatedBy”和“ModifiedBy”。所以,我在DAL中创建了一个构造函数参数来接收AuthUserSession。

在Global.asax中,以下行到位:

   //authentication 
      Plugins.Add(new AuthFeature(() => new MyAuthUserSession(), 
       new IAuthProvider[] { new MyCredentialsAuthProvider() })); 

无论我如何注册MyAuthUserSession与funq,它解析为一个实例,在它没有会话信息。

container.Register<IAuthSession>(new MyAuthUserSession()); 

container.Register(new MyAuthUserSession()); 

简而言之;通过构造器注入将“当前用户ID”变为类的最佳方式是什么?

回答

1

UserSession不是从IOC解析出来的依赖关系,因此不应该在IOC中注册,这将毫无意义,并会导致实际工作方式的混淆。

这些模型是在运行时使用客户端的Cookie与每个HTTP请求一起传入的Cache中的水合物。 Session wiki有关Sessions如何在ServiceStack中工作的更多信息。

自定义键入用户会话可以在ServiceStack使用base.SessionAs<T>方法来解决,e.g:

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); 
    } 
} 
+0

谢谢,非常有意义。 – Gumzle