2012-04-20 5 views
4

NinjectでタイプをWCFでワイヤリングする正しい方法は何ですか?私はWCF拡張機能を持っており、Ninject自体はNuGet経由でWCFプロジェクトに追加されています。しかし、私は次に何をすべきかに固執しています。私は、ServiceHostFactoryの代わりにglobal.asaxを使用するいくつかの古くなったサンプルを実行しているようです。 ServiceHostFactoryメソッドが最適ですか?NinjectとWCF - コントロールコンテナの反転を初期化する正しい方法

NinjectでWCFを使用する最良の例はありますか? Ninject WCF拡張機能が提供するオブジェクトを使用して配線を行う方法がわかりません。

さらに詳しい情報:
私は歩くしようとした - https://github.com/ninject/ninject.extensions.wcf/tree/Maintenance_2.2/src/Examples/WcfTimeService

私のプロジェクトでは、私は、これはもはや互換性や最新の現在だと思ったん理由ですGlobal.asax.csに
NinjectWcfApplicationを解決することができませんでしたNinject。

+1

NinjectWcfApplicationを解決できなかったときにはどんなエラーが発生しましたか? – Troy

+0

「IntPtrをアクティブにする際にエラーが発生しました。一致するバインディングがありません...」というエラーもあります。どのようにこれを解決しましたか? –

+0

hambonius、申し訳ありません私はその作品を解決するために何をしたのか覚えていません。ごめんなさい。 – BuddyJoe

答えて

2

NinjectWcfApplicationから継承し、カーネルを作成するためにあなたのglobal.asaxを変更する必要があります。そのページをマスターブランチに切り替えるだけです

+0

エラーの考え:IntPtrの起動中のエラー 一致するバインディングはありません。型は自己バインドできません。 – BuddyJoe

+0

btw、正しい方向に私を指摘してくれてありがとう - 私は上記のエラーを追跡することができます私は設定されると思います。 – BuddyJoe

+0

またAppStartフォルダとNinjectWebCommon.csファイルがあることに気がつきました。これはNuGetによって追加されましたか?私はそこに私のインターフェイスをバインドすべきか、どこか別の場所にバインドすべきですか? – BuddyJoe

1

私はNinjectを使用していませんが、通常はServiceHost実装でワイヤアッププロセスを開始します。ような何か:

public sealed class MyServiceHost : ServiceHost 
{ 
    public MyServiceHost() : base() 
    { 
     MyServiceLocator.SetAsDefaultServiceLocator(); 
    } 
} 
4

あなたのweb.configファイルに

<serviceHostingEnvironment> 
     <serviceActivations> 
     <add relativeAddress="MyService.svc" service="MyService" factory="Ninject.Extensions.Wcf.NinjectServiceHostFactory" /> 
     </serviceActivations> 
</serviceHostingEnvironment> 

をサービスアクティベーション(ディスク上の無.SVCファイル)セットアップninjectホスティング工場を使用している場合、あなたは.SVCファイルを使用している場合マークアップを編集してFactory="Ninject.Extensions.Wcf.NinjectServiceHostFactory"<%@ ServiceHost ... %>宣言に追加することができます。

次に、あなたが提供するリンクが古くなっている2.2からである

public class Global : NinjectWcfApplication 
{ 
    protected override IKernel CreateKernel() 
    { 
     var kernel = new StandardKernel(); 
     return kernel; 
    } 
} 
+0

Remoへの私の質問にお考えですか? – BuddyJoe

+0

AppStartフォルダはNugetによって実際に追加されています(Ninjetパッケージ経由)。 NinjectModuleから継承し、Loadメソッドでバインディングをセットアップする独自のクラスを作成することをお勧めします。あなたはKernel.Loadを使用してどこでもバインディングを読み込むことができます。 Troy

関連する問題