1

自動フィクスチャの新機能です。mvc Web APIコントローラーで試しています。ステップスルーすると、コンテナ(構造マップ)によって満たされた依存関係があります。apicontrollerのコンストラクターが実行されて終了するのを確認してから、ContainerSpecimenBuilder(構造マップがインスタンスを提供する場所)をヒットし、HttpContentを探していますが、もちろん私はしません私のコンテナに持っています。HttpContent について聞いたことさえありません。私は、ContainerSpecBuilder にフィルターを適用するだけでよいと考えています。それはハックのように思えますが、今私が得たのはそれだけです。

編集

そのため、!type.IsInterface の場合は ContainerSpecBuilder にフィルターを設定し (実際にはインターフェイスのみを注入するため)、失敗しましたが、autofixture で HttpContent を作成できないということを除いて同じエラーが発生します。

もう一度編集

わかりましたので、FakeHttpContentSpecBuilder を作成しました。これで問題は解決しましたが、今では apicontroller の他の側面からあらゆる種類の悲しみを感じています。最初は IDependencyResolver、次に IHttpRouteData です。私のコンテナが機能していないように思えます (ただし、本番環境とまったく同じようにセットアップされています)、または autofixture に ApiController のインスタンスを作成させるには、予想以上に多くのことがあるようです。

私はここに私の経験を追加し続けます。誰かが私のソリューション (ハック) に興味を持っている場合は、私に知らせて投稿します.

そしてもう一度編集

そこで、ここにあった一連のクラスを削除し、それらすべてを (もう少し簡潔に)ここの GISTに入れました。

私が得るエラーは

StructureMap.StructureMapException: StructureMap 例外コード: 202 PluginFamily に対して定義された既定のインスタンスがありません

これは基本的に、SM がコンテナー内に IDependency を見つけられないことを意味します。ただし、このコードは実際にはこのテスト以外でも問題なく動作するため、これは誤りであることがわかりました。さらに、SM レジストリに IDependency 宣言を追加すると、別のインフラストラクチャ エラー IhttpRouteData に移動するだけです。

これはかなり複雑に思えますが、コンテナーがコンストラクター内のオブジェクトに依存関係を提供するようにしたいということ以外には、これには何の投資もしていません。もっと簡単な方法があれば、喜んでそれを使用します。

それは私が持っているものです

R

4

0 に答える 0