在Servicestack 5.1.0中使用Autofac Ioc InstancePerHttpRequest

时间:2018-07-30 05:04:36

标签: autofac

我们最近已将API(使用表单身份验证)Servicestack版本4.0.40升级到Servicestack的最新稳定版本(V5.1.0)。我们使用InstancePerHttpRequest用于API的Autofac Ioc注册(这是使用Autofac.Mvc4包中的Autofac.Integration.Mvc)。

升级服务堆栈后,以下代码不再起作用。

this.UseAutofac(afcBuilder.Build());
  

错误CS0012在装配中定义了“ ServiceStackHost”类型   没有引用。您必须添加对程序集的引用   'ServiceStack,版本= 4.0.48.0,文化=中性,   PublicKeyToken = null'。

因此,我们尝试了使用InstancePerDependency使其工作的替代方法,但这会在API身份验证后导致丢失“ ASP.NET_SessionId” cookie值。

请建议使用最新的ServiceStack版本获得实际的“ InstancePerHttpRequest”工作的代码。

1 个答案:

答案 0 :(得分:0)

我已经回答了this question in ServiceStack Customer Forums,但是出于类似问题的任何其他好处,我将在下面列出:

问题与ServiceStack或AutoFac无关,而是与您的一个依存关系有关,该依存关系仍然对ServiceStack的旧 v4.0.48 具有二进制引用(在异常中突出显示)。您不能混用和匹配来自不同版本的ServiceStack .dll,因此您将需要重新编译具有旧二进制ServiceStack参考的任何程序集,以使用您正在使用的ServiceStack版本。

Autofac不会依赖ServiceStack,这将是您在Autofac中注册的依赖项之一。您可以使用JetBrains dotpeek之类的程序集检查器,并检查项目中每个dll引用的.dll引用,或注释掉注册,直到找到具有依赖性的注册器为止。


基本上,您不太可能专注于ServiceStack或Autofac .dll,需要找到引用ServiceStack v4.0.48 .dll,然后重新编译使用升级到的ServiceStack版本。

如果查看Autofac.Mvc4的依赖项,您会发现它仅与Autofac依赖。 Autofac不会依赖于ServiceStack v4.0.48,您自己的.dll之一将具有导致问题的旧二进制引用。