2017-03-08 3 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

여기 놀이에이 개 부분이 있습니다. 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 그들을 주사.