2013-08-29 18 views
8

依存性解決にUnityを使用しているMVC4アプリケーションがあります。私たちが持っているものの1つは、Unityコンテナのためのロガーデコレータです。依存性の解決が失敗したときのログ記録の唯一の目的です。解決していないタイプのUnity登録エラー

私のアプリが明示的に解決していないことを解決できないタイプがかなりあります。これらの種類は次のとおりです。スロー

IControllerFactory 
IControllerActivator 
IViewPageActivator 
ModelMetadataProvider 
ITempDataProvider 
IActionInvoker 
IAsyncActionInvoker 

例外はすべてこのようなものです:

タイプITempDataProviderにアクセスコンストラクタを持っていません。

...独自のタイプです。

これらの例外はアプリケーションの起動時にのみ発生し、現在はログに記録しています。したがって、アプリケーションはエラーが発生した後でもうまく動作します。

嚥下エラーは正当な理由なしに嫌いですが、最初に解決しようとしていることを理解していないと、私には正当な理由がありません。

質問:

1)誰が/何がこれらを解決しようとしている人を知っていますか?私のコードベースのどこにもありません。 2)フレームワークのどこかで解決しようとしている場合、私のアプリがこれらのためにUnityで解決策を提供することが期待されますか? 3)これはちょうど期待された動作ですか、私はこれらの例外を飲み込むべきですか?

これはまだ進まないことを理解していますが、他の誰かがこの種のエラーを見て正しい方向に向けることを期待しています。

答えて

7

あなたがしました:だから、あなたがなどの指定コンストラクタの

例自体がModelMetaDataProviderなどのコンストラクタのパラメータを持つMVCクラスを取るコンストラクタを持つクラスを、解決していると思われますMVCのDependencyResolverとしてUnityを接続しましたか?表示されているすべてのタイプは、MVCフレームワーク自体で内部的に使用されており、MVCはその問題を解決しようとしています。

何かが解決されずに標準の実装に戻った場合、フードの下のMVCコードがエラーをキャッチします。このようにして、必要に応じてそれらのもののカスタム実装をプラグインする統一された方法があるようにします。

これらの例外は何もする必要はありません。単に発信者に戻って流れてください。MVCは正しいことを行います。

+0

私はこれを答えとして受け入れました。これは期待された振る舞いがまさに私が探していたものであるというあなたの明確化です。ありがとう、私はそれを感謝します。 – Silas

+0

私はこの答えは正確ではないと思います。実際にはこの例外をキャッチしてnullを返す必要があります – Illidan

+0

私はこの回答を投票しました。しかし、私はエンタープライズ環境で働いています。答えをサポートするために私に指摘できる文書はありますか? – Thomas

2

パラメータのないコンストラクタを持たないUnityを介してクラスを解決すると、明示的に指示しない限り、Unityはコンストラクタのいずれかのパラメータ型を再帰的に解決しようとします。あなたが直接解決していない可能性があるタイプのためにあなたが見ているもののようなエラーを得る。

<register type="IMyThing" mapTo="MyThing"> 
    <constructor> 
    <param name="x" type="MyType1" />   
    <param name="y" type="MyType2" /> 
    </constructor> 
</register> 
+0

これは非常に興味深い考えです。私が調査しなければならないものです。私はこれが当てはまるとは思わない - しかし、このコードで示したものと同じくらい統一的な構成では、確かに可能性の範囲内にある。私はあなたに戻ってきますが、これは私のコードを通して櫛をかけるのに時間がかかるかもしれません。 – Silas

+1

別の言葉で、あなたはこう言っています: "ユニティは、コンストラクタのいずれかのパラメータ型を再帰的に解決しようとします。 – Silas

+1

使用するコンストラクタと、Unityコンフィグレーションに挿入する値を指定します。私の答えを更新しました。 – Haney

関連する問題