2016-09-24 10 views
2

私はDIシナリオの初心者で、Unityとasp.net mvcを使用してDIシナリオを実装しています。Unity MVCはデフォルトでタイプを解決しますか?

UnitOfWorkクラスにDbContexインスタンスを挿入しようとしました。インスタンスを登録しましたが、DbContexのオブジェクトを既に注入していて、DbContexを解決するためのコードを記述していないことに気付きました。

どうすれば可能ですか? Unityはデフォルトでインスタンスを解決しますか?

DIを動作させるためにこの「解決コード」を書くのは私の責任だと思っていました。

例えば

、私はコントローラに依存関係を注入していたとき、私はGetControllerInstance方法でこのようなコードを記述する必要があります。

return MvcUnityContainer.Container.Resolve(controllerType) as IController

答えて

2

ルートオブジェクト(コントローラクラスなど)のみを解決する必要があります。ユニティはこのクラスのコンストラクタを見て、いくつかの依存関係(コンストラクタパラメータ)があることを確認します。次に、これらの依存関係を自動的に解決しようとします。これらの依存関係に依存関係がある場合は、最初にこれらの依存関係を解決します。

このプロセスを自動配線といいます。自動配線がなければ、なぜDIコンテナを使用するのですか? (Not that I think that you should use one in the first place

0

Unityはデフォルトでプロセスにロードされているすべての具体的な型を「登録」するので、具体的な型の.Resolveを呼び出して結果を得ることができます(実際にはその型のコンストラクタがUnityによって呼び出されると仮定します)。

インターフェイスの場合、具体的なタイプ/インスタンスへのマッピングを登録する必要があります。

+0

あなたはUnityがデフォルトで「登録する」と言っていますが、Unityが登録されているすべてのタイプをデフォルトで「解決」するかどうかを知る必要があります。 –

関連する問題