gpt4 book ai didi

wcf - 使 WCF OperationContext 与 DI 和测试很好地配合使用

转载 作者:行者123 更新时间:2023-12-01 01:27:39 24 4
gpt4 key购买 nike

我正在运行托管在 Windows 服务中的 WCF 服务; WCF 服务的依赖项是通过 Unity 注入(inject)的,这一切都很好。因此,该服务也很容易为其编写单元测试。

最近,我向服务中添加了使用 OperationContext 检查传入消息的功能。不幸的是,由于微软对密封和/或静态类的喜爱以及缺乏接口(interface)和/或虚拟方法,这反而使服务的可测试性失去了意义。

所以在这种情况下,我求助于 .NET 人最喜欢的工具,一个包装类。由于这是一个常见的问题,有人的already done the hard work for us .因此,这为我的 WCF 服务添加了一个新的依赖项,即 IOperationContext 的实现。这对我的单元测试来说没问题,NSubstitute 是我选择的模拟框架(就像 Moq,但没有 .Object 的诅咒)。

但是,当我尝试真正启动服务时,我遇到了以下问题 - 正在包装的 OperationContext 在 IoC 容器注册完成时尚未初始化。我的初始化代码(在这里使用 Unity)是:

container.RegisterType<IOperationContext, OperationContextWrapper>(new InjectionConstructor(OperationContext.Current));

但此时, OperationContext.Currentnull ,所以 Unity 立即抛出异常,而我在 40 岁之前退休的梦想付诸东流。

所以,问题是:如何让 WCF 与 DI 和包装好的 OperationContext 配合得很好。 ?

最佳答案

也许我不明白,但我不确定你为什么要将 OperationContext.Current 注入(inject)你的包装器。如果 OperationContextWrapper 正在包装 OperationContext,那么为什么不让它的实现直接与 OperationContext.Current 交互呢?我认为您试图保持可测试的代码不是 OperationContextWrapper,而是通过 IOperationContext 接口(interface)依赖于它的代码?那么谁在乎 OperationContextWrapper 做什么呢?

关于wcf - 使 WCF OperationContext 与 DI 和测试很好地配合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6672518/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com