我们有一个多服务应用程序。我们已经移动了一个方法,该方法涉及对WCF端点公开的单独组件的数据库访问。
我们有两个选择:
1. WCF调用该方法
2.直接调用方法,由我们的DI引擎解决
系统性能是一个关键问题,因此我们希望通过配置文件在选项1和选项2之间切换而不重新编译客户端应用程序。
对这个想法/架构的任何提示或建议?
答案 0 :(得分:1)
您可以教Unity通过接口解析WCF服务。因此,您解决本地服务实现或WCF问题无关紧要。您将始终在您的类中注入 IMyService 。这只是对配置的更改。
您可以将扩展程序配置为使用app.config或WCF发现,或在代码中明确指定 Binding 和 EndpointAddress 。
有关详细信息,请参阅TecX project。源代码位于 TecX.ServiceModel.AutoMagic 中。一些演示用法的测试可以在 TecX.ServiceModel.Test
中找到<强>更新强>
为您的服务定义一个界面(例如 IMyService ),并使用必要的属性( DataContract , OperationContract )对其进行修饰。实现该接口(例如在类 MyService 中)。 MyService 调用您的方法。现在告诉Unity将 IMyService 直接映射到 MyService 或添加容器扩展,以便将 IMyService 映射到由WCF生成的代理< EM>的ChannelFactory 。部署您的服务,您就完成了。 Unity会将 IMyService 的任何实现注入到需要它们的类的构造函数中。
答案 1 :(得分:1)
如果系统性能是一个关键问题,并且没有任何其他要求以这种方式推动设计,我认为你应该避免额外的WCF层。您可以执行一些性能测试,看看它的开销是否可以接受。最后,您可以决定哪个选项更适合您,因此无需切换。