首页 > 解决方案 > 将 Autofac Ioc InstancePerHttpRequest 与 Servicestack 5.1.0 一起使用

问题描述

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

servicestack 升级后,下面的代码不再起作用。

this.UseAutofac(afcBuilder.Build());

错误 CS0012 类型“ServiceStackHost”在未引用的程序集中定义。您必须添加对程序集“ServiceStack,Version=4.0.48.0,Culture=neutral,PublicKeyToken=null”的引用。

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

请建议代码以使实际的“InstancePerHttpRequest”与最新的 ServiceStack 版本一起工作。

标签: autofac

解决方案


我已经在 ServiceStack 客户论坛中回答了这个问题,但为了其他人的利益,我将在下面包含类似问题:

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

Autofac 不会依赖于 ServiceStack,它将是您在 Autofac 中注册的依赖项之一。您可以使用像JetBrains dotpeek这样的装配检查器并检查项目中每个 dll 引用的 .dll 引用,或者注释掉注册,直到找到具有依赖关系的注册。


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

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


推荐阅读