【问题标题】:Ninject into WCF REST Service注入 WCF REST 服务
【发布时间】:2011-01-12 00:32:44
【问题描述】:

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

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

Games.Games 有一个接受 Dal.Games.IGames 的 ctor,我有一个 NinjectModule 并准备好绑定,但我终其一生都无法弄清楚将内核传递到何处以使其控制服务的创建类。

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

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

【问题讨论】:

标签: wcf web-services rest ninject


【解决方案1】:

让我先说一下,真正了解 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 大师能够出现并提供真正的解决方案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-03
    • 1970-01-01
    • 1970-01-01
    • 2019-03-14
    • 2011-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多