wcf - 注入(inject) WCF REST 服务

标签 wcf web-services rest ninject

我使用的是 WCF REST 模板,其中服务仅通过一个类实现并在 Global.ascx 中注册(很像 MVC Controller )。

RouteTable.Routes.Add(new ServiceRoute("Games/Games", new WebServiceHostFactory(), typeof(Games.Games)));

Games.Games 有一个接受 Dal.Games.IGames 的 ctor,我有一个 NinjectModule 和 Bindings 准备就绪,但我无法确定将内核传递到哪里以让它控制服务的创建类。

我的服务没有标记 (svc) 文件,因此我猜测它与将 WebServiceHostFactory 替换为 Ninject 中的文件有关。我能够在 Ninject Web 扩展中找到一个,但只是将其删除并没有改变任何东西,更不用说我找不到任何地方可以在那个类中设置 kenel。

非常感谢任何解决方案、提示或技巧。

最佳答案

首先让我说,真正了解 Ninject 内部工作原理的人可能会提供更简洁的解决方案。不过,我一直在努力解决与您提到的相同的问题。

主要是通过反复试验,我确定如果您在 Ninject.Extensions.Wcf 库中进行以下代码更改,Ninject 将在您的服务类上发挥其魔力。

在 NinjectServiceHostFactory.cs 中,我更改了基类和传递给 .Get 的类型

public class NinjectServiceHostFactory : WebServiceHostFactory //<-- Changed base class
{
    protected override ServiceHost CreateServiceHost( Type serviceType, Uri[] baseAddresses )
    {
        var serviceTypeParameter = new ConstructorArgument( "serviceType", serviceType );
        var baseAddressesParameter = new ConstructorArgument( "baseAddresses", baseAddresses );
        return KernelContainer.Kernel.Get<NinjectServiceHost>( serviceTypeParameter, baseAddressesParameter );
    }
}

在 NinjectServiceHost.cs 中,我将基类更改为 WebServiceHost。

此外,我还添加了对两者的引用:

using System.ServiceModel.Web;

我确信这个解决方案打破了其他 WCF 服务类型的扩展,所以希望 Ninject 大师会出现并提供真正的解决方案。

关于wcf - 注入(inject) WCF REST 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4664261/

相关文章:

java - 从 api 获取大量数据

wcf - 点对点和端对端安全性有什么区别?

asp.net - 使用JQuery调用Web服务时可能存在哪些威胁以及如何避免这些威胁?

java - 如何维护 Java 中的 RESTful API 版本?

linux - 通过端口 8080 上的 SSH 的 HTTP XML 数据

java - 我想在 HttpURLConnection android 中发布数组参数

laravel - 如何从 Laravel JSON Api 响应中删除字段

http - 添加到服务器响应但未从服务器返回的 WCF 自定义 HTTP header

asp.net - 获取到 localhost 的连接被中断。尝试发送 [DataContract] 标记对象的 JSON 表示时

c# - SOAP WCF : Prevent deserialization to private fields