2011-01-12 16 views
3

サービスがクラスだけで実装され、Global.ascxに登録されているWCF RESTテンプレートを使用しています(MVCコントローラとよく似ています)。WCF RESTサービスに絞られました

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

Games.GamesはDal.Games.IGamesを受け入れるctorのを持っていると私はバインディングとNinjectModuleの準備ができているが、私はそれを制御するために持っているためにカーネルを渡すために場所を把握、私の人生のために傾きますサービスクラスの作成。

私のサービスはマークアップ(svc)ファイルを持っていないので、WebServiceHostFactoryをNinjectから置き換えて何かがあると推測しています。私はNinject Webの拡張モジュールを見つけられましたが、そのクラスのケネルをどこにでも置くことはできませんでした。

すべての解決策、ヒントまたはヒントを高く評価します。

+1

最新のソースには、VS2010/.NET 4.0用のWCF RESTテンプレートでNinjectを使用する例があります。私もここで2.2の例を掲載しました:https://github.com/chafey/Ninject-2.2-Wcf-Rest-Example –

+0

Thanks @ChrisHafey!シンプルで簡潔な例。 +1 –

答えて

4

Ninjectの内部動作を実際に知っている人が、きれいな解決策を提供している可能性があります。私はあなたが言及したのと同じ問題に取り組んできました。

ほとんどの試行で&エラーNinject.Extensions.Wcfライブラリで次のコードを変更すると、Ninjectはサービスクラスでその魔法を動作させると判断しました。 NinjectServiceHostFactory.csで

、私は、基本クラスを変更し< T NinjectServiceHost.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); 
    } 
} 

のに.getに渡さI型WebServiceHostに基本クラスを変更しました。

using System.ServiceModel.Web; 

私は、このソリューションは、うまくいけばNinjectの第一人者が一緒に来て、真のソリューションを提供します、他のWCFサービスの種類については、この拡張機能を破ると確信している:

また、私は両方にこの参照を追加しました。

関連する問題