1

我一直在尝试使用以下场景设置解决方案:

  1. 客户端应用 X 调用服务 A
  2. 服务 A 调用类库 Y
  3. 类库 Y 调用服务 B

所以项目以这种方式相互引用:

  • 客户端应用 X -> 引用服务 A
  • 服务 A -> 引用类库 Y
  • 类库 Y -> 参考服务 B

我已将项目配置为开始调试所有项目(类库除外),并且服务在不同端口上的 IIS Express 下运行。

当我使用 SocialBootstrapApi 项目作为服务的模板并开始调试时,服务 A 启动正常,但在服务 B 上出现编译错误:

CS0121: The call is ambiguous between the following methods or properties:
'ServiceStack.Mvc.Bundler.ToJsBool(bool)' and 'ServiceStack.Mvc.Bundler.ToJsBool(bool)'

在线的

App.models.login.set({ isAuthenticated: @session.IsAuthenticated.ToJsBool() });

我还使用空的 ASP.NET 项目 + ServiceStack.Host.AspNet 作为模板进行了测试,服务 A 再次运行,但我得到了

System.IO.InvalidDataException: AppHostBase.Instance has already been set

在线的

new AppHost().Init();
4

1 回答 1

1

您似乎正在尝试在其他工作主机中启动主机。我建议您重新排序和解耦依赖项。

您可以通过以下方式做到这一点:

  • 库 Y 公开了一个具有自己需求的接口/合同。没有对任何服务的直接引用是硬编码的。
  • 服务 B 实现该接口(或库 B 实现)。
  • 然后 Service A 或 AppX 是配置所有服务的唯一主机,并且您将所有部分与 IoC 容器挂钩。

如果提供更具体的服务描述等,我可以提出更好的建议。Servicestack 让您可以通过 IoC 容器和 IMessageService 解耦服务间调用

于 2013-11-26T11:24:41.723 回答