2017-03-08 10 views
0

私は私のAsp.Netコア1.1 MVCプロジェクトを実行すると、私は私のコントローラのコンストラクタでこのようなことを行うことができます。Asp.Net Core MVCでコントローラのコンストラクタで使用できる組み込みのフレームワークオブジェクトは何ですか?

public MyController(
    Microsoft.Extensions.Options.IOptions<AppSettings> appSettings, 
    IHostingEnvironment environment, 
    ILogger<MyController> logger) 
{ 
    .... 

それは動作しますが、それはどのようにそこになっていますか?私はStartup.csでどこに配置してDI/IoCに入れるのか知っていますが、ここで何が起こっているのか分かりません。なぜ/それはどのようにして動作しますか?使用されるべきコントローラ定義されたルートの後

これは助けにはならなかった、 asp.net mvc what is the life of a controller?

+0

依存性注入についてお読みください。 – DavidG

+0

私はDIが何であるか知っています。コントローラーにどのようになっているのか分かりません。フレームワークのどこかで、IoCを使って「うまく動作しています」。 – johnny

+0

これらの依存関係がコントローラに注入されていますが、どうして得られないのですか? – DavidG

答えて

1

は、ここに遊んでいる2つの部分があります。 IControllerActivatorはコントローラーを作成します。 Aspnet Coreには、HttpContext.RequestServicesを使用するServiceBasedControllerActivatorが含まれています。これは、起動クラスで作成されたIServiceProviderです。

IServiceProviderはIServiceColectionから作成されます。

var services = new ServiceCollection(); 
services.AddTransient<IMyInterface, MyClass>(); 
var serviceProvider = services.BuildServiceProvider(); //ioc container 
serviceProvider.GetService<IMyInterface>(); //will create an instance of: MyClass 

同じように、このServiceBasedControllerActivator作品:それはコンストラクタがあり、ServiceProviderからそれらを噴射するプロパティをチェックします。

関連する問題