gpt4 book ai didi

c# - 如何在没有默认无参数构造函数的情况下为单个 WCF 服务注入(inject)参数

转载 作者:行者123 更新时间:2023-11-30 21:51:21 28 4
gpt4 key购买 nike

我正在使用 SimpleInjector,当我尝试调用 SimpleInjectorServiceHostFactory-->CreateServiceHost(Type serviceType, Uri[] baseAddresses) 时出现以下错误。此错误仅针对标记为 [ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)] 的 WCF 服务出现。

The service type provided could not be loaded as a service because it does not have a default (parameter-less) constructor. To fix the problem, add a default constructor to the type, or pass an instance of the type to the host.

对于标记为 [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)] 的服务,即使服务没有默认的无参数构造函数,SimpleInjectorServiceHostFactory-->CreateServiceHost(Type serviceType, Uri[] baseAddresses) 方法也能完美运行.

知道如何在没有默认无参数构造函数的情况下为 [ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)] 服务注入(inject)参数,就像 [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)] 服务一样吗?

谢谢

最佳答案

经过一些挖掘后,我发现这是简单注入(inject)器中的一个错误,或者至少是 WCF 处理此问题的方式中的一个错误解释。

ServiceHost类在其构造函数中需要单例对象而不是类型。如果提供了类型,ServiceHost 将尝试创建实例,因此它需要一个默认构造函数。

我创建了一个 issue在 GitHub 上为此。

but why this default constructor is not required for the "PerCall" WCF Service

因为在这种情况下,WCF 将回调到容器中以创建类型,而 Simple Injector offcourse 可以处理构造函数中的参数。

一个可能的解决方法是确实将您的服务配置为 PerCall 并假设您希望 Single 用于某些缓存,将缓存从 WCF 实现重构到它自己的类中,并将其注册为简单注入(inject)器中的单例。

关于c# - 如何在没有默认无参数构造函数的情况下为单个 WCF 服务注入(inject)参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35729614/

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