3

私はこれで約8時間頭を悩ませてきましたが、ninjectのカスタムブートストラップを変更する方法についての簡単な説明を見つけることができないようです(最後にv2.xxxのコードで作業しました)新しい v3.0.0.0 構文。

私は現在、次のものを持っています:

public class NinjectCustomBootStrapper : NinjectNancyBootstrapper
{
  protected override Ninject.IKernel GetApplicationContainer()
  {
    return Program.MyContainer;
  }

}

隔壁クラスで、および :

public static IKernel MyContainer
{
  get { return _myContainer ?? (_myContainer = CreateKernel()); }
  set { _myContainer = value; }
}

private static IKernel CreateKernel()
{
  var kernel = new StandardKernel();
  kernel.Bind<CardMonitorService>().ToSelf().InSingletonScope();
  return kernel;
}

コマンドラインアプリのメインプログラム「Program.c」で。

ninject を V3.0.0.0 に更新してから、破壊的な変更がいくつかあることがわかりました。私は ninject をあまり頻繁には使用しないことを認めます (私は通常、structuremap を使用します)。

Ninject をアップグレードしたので、アプリを起動すると次の例外が発生します。

Method not found: 'Ninject.Syntax.IBindingWhenInNamedWithOrOnSyntax`1<!0>
Ninject.Syntax.IBindingToSyntax`1.ToConstant(!0)'.

大量の検索と調査の後、私が見つけることができた最も近いものはこれです:

http://sharpfellows.com/post/Ninject-Auto-registration-is-ching-in-version-3.aspx

それは私を正しい方向に向けていますが、カスタムバインディングジェネレーターを使用していないため、まだ完全な解決策ではありません.

だから私の質問はこれです。

上記を書き直して、プロジェクトが再び機能し、WCF サービスが呼び出されたときに、要求が入ったときに正しいシングルトン バインディングが渡されるようにするにはどうすればよいですか。ninject 2 に戻ることはオプションではありません。が追加されたため、v3 アップグレードが強制されました。これらは、要求された新しい機能を追加するため、私はそれに取り組んでいます。

参考までに、これは .NET4 ビルドであり、Topshelf を使用して SCM インターフェイスを提供する Windows サービスとしてセルフ ホスティング WCF セットアップを使用して NancyFX で実行されます。

乾杯

シャウティ

少し物事を明確にするための補遺

これは、もともと以前に書かれた既存のプロジェクトです。プロジェクトにいくつかの新しい機能を追加するように依頼されました。

これらの新機能を追加する一環として、プロジェクトに追加された新しい依存関係には新しいバージョンの Ninject が必要であるため、使用されている Ninject のバージョンを以前のバージョンから V3.0.0.0 にアップグレードする必要がありました。

プロジェクトに Ninject V3 が追加されたため、上記のコードは問題なく正常に動作しました。

以前のバージョンの Ninject に戻ることはできません。これは、追加している新しい機能を追加できないことを意味するためです。

これまでに行った調査から、上記のsharpfellowsリンクは、これまでインターネットで見つけた問題の最も近い説明です.

私は Ninject をあまり使用しないので、V2 と V3 の間で何が変更され、(私の調査に基づいて) 問題の原因となっているのかを知る背景がありません。

V3 で動作するように、V2 で記述されたコード (および上記のコード) を変更する方法を知る必要があります。

4

2 に答える 2

2

MissingMethodException通常、展開の問題です。展開するアセンブリとは異なるアセンブリに対してコンパイルします。同じバージョンと同じビルドをデプロイしたことを確認してください。

于 2012-06-15T13:20:19.267 に答える
1

そのため、1週間ほど経った後、問題はNancy開発チームがninjectの最新バージョンとのバイナリ互換性を破ったことであることが判明しました(またはその逆):-)

これを修正するための GitHub プル リクエストが次の場所にあります。

https://github.com/NancyFx/Nancy.Bootstrappers.Ninject/pull/6

ただし、次のバージョン 'Nancy.Bootstrapper.Ninject' 0.12 はすぐに NuGet で公開され、修正が実装されます。

于 2012-06-20T10:31:25.403 に答える