2011-01-12 136 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大師會來提供真正的解決方案。