3

このコード行でエラーが発生します:

    using (IMaterialClient rawMaterialServiceProxy =
ServerUtility.Container.Resolve<IMaterialClient>())

エラー:

依存関係の解決に失敗しました...現在のタイプXxxはインターフェースであり、構築できません。タイプマッピングがありませんか?

具体的なIMaterialClientを登録していません。私が今見たPluralsightビデオでは、Unityは実装が指定されていない場合に実装を見つけるため、すべてのタイプを登録する必要はないと言われました。それは変わりましたか?私は何かが足りないのですか?なぜそれが解決しないのですか?これを実行すると、実際のIMaterialClient実装を含むアセンブリがbinフォルダーにあります。

4

2 に答える 2

5

彼らがユニティについてそう言ったのなら、彼らは間違っています。Unityは具象型(.Resolve<MyClass>)を解決しますが、インターフェースを具象型に関連付けて明示的に登録する必要があります。

これらの機能を提供するために、UnityAutoRegistrationなどの拡張機能があります。私は彼らとの経験がありません。

于 2012-12-06T21:02:20.127 に答える
5

Unityのその機能を知りません。私の知る限り、未登録の具象型は問題なく解決されますが、抽象型またはインターフェースには具象型が登録されている必要があります。最善の策はそれを登録することです:

ServerUtility.Container.RegisterType<IMaterialClient, ConcreteMaterialClient>();
于 2012-12-06T21:10:42.440 に答える