多くのMVCの例では、Startup
クラスのConfigurationServices
メソッドでインターフェイスを登録する方法を参照してください。これは、あなたのコードがすべてMVCアプリケーション内に書かれているときには問題ありませんが、 'Real World'では必ずしもそうではありません。DI in .Net Core MVC 1.0
私は、フォーム
public class MyService : IMyService
{
private readonly IMyRepository _myRepository;
public MyService(IMyRepository myRepository)
{
_myRepository = myRepository;
}
.......
でクラスライブラリプロジェクトは、今私のコントローラで、私は、フォームのコンストラクタを持っています:
public HomeController(IConfigurationRoot config, IMyServcie myService)
{
......
問題はMyService
インタフェースが登録されていない、ありますDIコンテナと一緒に私は実際に他の層のservices.AddScoped<interface,class>()
行のコードをロードしてConfigurationServices
メソッドを膨らませたくありません。
他のレイヤー(リポジトリとサービス)で最初に登録する必要があります(どちらも.NET Coreクラスライブラリプロジェクトです)。次にそれらのコンテナを親コンテナに配線しますか?
を呼び出す必要があります。あなたが話している膨らみはどこかにあるだろう。 – Shyju
はい、私は知っていますが、自分のリポジトリレイヤで定義されたインターフェイスをリポジトリレイヤコンテナに登録したいと考えています。次に、サービスレイヤコンテナに自分のサービスレイヤで定義されたインターフェイスを登録し、そのサービスレイヤコンテナの拡張としてリポジトリコンテナを追加し、最後にサービスレイヤコンテナをMVCプロジェクトの構成サービスに登録します。私はUnityを使ってこれを行う方法を知っていましたが、コア1.0と組み込みのDiコンテナでは、これを行う方法はわかりません。 – bilpor
'ConfigurationServices'はコンポジションルートなので、サービスを登録します。鼓動はどこかに行かなければならない。他のレイヤーとターゲット 'ServiceCollection'に拡張メソッドを作成し、必要に応じて追加することができます。彼らは技術的にそこに最初に登録されていません。 'ServiceColection'に対して拡張メソッドを適用すると、それらはコンポジションルートに登録されます。 – Nkosi