3

我是 ServiceStack 的新手,所以这可能是一个菜鸟问题:

我正在开发一个使用 ServiceStack 的 ASP.NET MVC4 应用程序,并试图弄清楚如何从我的 MVC4 控制器使用的类(EF 上下文或 PetaPoco 数据库)中获取当前 IAuthSession服务堆栈控制器。

有问题的类在 Funq 中注册了 ReuseScope.Request 范围(即基于每个 HTTP 请求),理想情况下,我希望它的每个实例都使用构造函数参数或公共的当前 IAuthSession 自动装配财产。

我怎么做?


更新

经过一番挖掘,我想出了我认为可能有用的方法。

在我AppHost.Configure的注册中,我注册了一个从当前请求返回会话的 lambda:

container.Register<IAuthSession>(c =>
    HttpContext.Current.Request.ToRequest().GetSession());

还:

container.RegisterAutoWired<EFCatalogDb>();

EFCatalogDb我的 EF 上下文IAuthSession作为构造函数参数在哪里:

public class EFCatalogDb : DbContext
{
    public EFCatalogDb(IAuthSession session) : base()
    { }
    // ...etc....
}

不幸的是,当我可以测试此解决方法时,我还没有处于开发阶段,因此必须询问其他人这是否有意义。

4

1 回答 1

1

我的第一个建议是尝试将 IAuthSession 排除在您的数据库类之外,因为这会创建对 ServiceStack 的依赖,这似乎是不必要的。

话虽如此,我认为您可以走注册 IAuthSession 并让容器自动注入 IAuthSession 的路线。更好的方法可能是围绕 IAuthSession 创建您自己的“包装类”并将其注入到您的数据库类中。这将打破对 ServiceStack 的依赖。

如果保持对 ServiceStack 的依赖没有问题,另一种可能性是使用SessionFeature该类并执行类似的操作

var key = SessionFeature.GetSessionKey();
authSession = AppHost.Resolve<ICacheClient>().Get<IAuthSession>(key);
于 2013-06-26T18:58:25.823 回答