autofac - 将 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 版本一起工作。
解决方案
我已经在 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 之一将具有导致问题的旧二进制引用。
推荐阅读
- sql - 聚合查询与数学中的条件
- php - 将数据时间字符串转换为日期时间
- python - 在无限循环中休眠多长时间会影响 CPU 使用率吗?
- c# - 如何使用 Azure Mgmt SDK fluent 获取空资源组列表
- sql - 如何转置结果?
- swift - 如何在核心数据 xcdatamodel 中设置 UUID 属性的默认值
- python - 神经网络训练的准确性保持不变
- python - 移动显示的 PyQt5 场景
- asp.net-core - 是否可以在使用身份服务器的同一应用程序中使用 API 令牌和 cookie 来获取 Razor 页面或控制器操作?
- javascript - 在智能感知上显示模块时找不到模块