2011-01-12 142 views
3

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

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

Games.Games有一个构造函数接受Dal.Games.IGames和我有绑定一个NinjectModule准备,但我不能为我的生命找出其中传递的内核,以把它控制创建服务类。

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

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

+1

现在最新的源代码有一个使用Ninject和VS2010/.NET 4.0的WCF REST模板的例子。我也在这里发布了一个2.2的例子:https://github.com/chafey/Ninject-2.2-Wcf-Rest-Example – 2011-12-21 02:23:48

回答

4

让我先说一句,一个真正了解Ninject内部运作的人可能会提供一个更清洁的解决方案。我一直在与你提到的相同问题摔跤。

大部分通过试验&错误我确定如果您在Ninject.Extensions.Wcf库中进行了以下代码更改,Ninject将在您的服务类上发挥它的魔力。

在NinjectServiceHostFactory.cs,我改变基类并将其传递给。获得<Ť>

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); 
    } 
} 

在我改变基类WebServiceHost的NinjectServiceHost.cs类型。

另外,我加了这个,参照上述两个:

using System.ServiceModel.Web; 

我敢肯定,这个解决方案打破了这个扩展其他WCF服务类型,所以希望一个Ninject大师会来提供真正的解决方案。