2016-07-19 8 views
9

asp.netコアにasp.netアプリケーションを移植しようとしています。このような私のUnitOfWorkの実装では、プロパティ注入(ninjectを使用)があります。Asp.Netコアのプロパティ注入

[Inject] 
public IOrderRepository OrderRepository { get; set; } 
[Inject] 
public ICustomerRepository CustomerRepository { get; set; } 

.netコアのDIでのビルドを使用して同じ機能を実現する方法はありますか?また、慣習に基づくバインディングを使用することは可能ですか?

+0

関連:https://stackoverflow.com/questions/39849142/when-to-use-property-injection – Steven

答えて

10

いいえ、組み込みのDI/IoCコンテナは意図的に使用法と機能の両方でシンプルに保たれ、他のDIコンテナのプラグインのベースとなります。

したがって、自動検出、自動登録、デコレータまたはインジェクタ、またはコンベンショナルベースの登録は、ビルトインサポートがありません。私が知っている限り、組み込みコンテナにこれを追加する予定はまだありません。

プロパティインジェクションをサポートするサードパーティのコンテナを使用する必要があります。

プロパティ注入は、依存関係を隠し、クラスの作成時にオブジェクトが注入される保証がないため、すべてのシナリオの98%で不良とみなされます。

コンストラクタインジェクションでは、これをコンストラクタで強制し、nullをチェックし、クラスのインスタンスを作成しないでください。プロパティインジェクションではこれは不可能であり、ユニットテスト中にクラスがコンストラクタで定義されていないときにクラスが必要とするサービス/依存関係がわからないので、簡単に見逃してNullReferenceExceptionsを取得します。

プロパティインジェクションの唯一の妥当な理由は、サードパーティのライブラリによって生成されたプロキシクラス(つまり、オブジェクトの作成について管理できないインターフェイスから作成されたWCFプロキシ)にサービスを注入することでした。

避けてくださいどこでも else。

関連する問題