2017-03-08 49 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包含ServiceBasedControllerActivator,它使用HttpContext.RequestServices這是在啓動類中創建的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注入他們。