在ASP.NET Core MVC中预设在DI过程中使用了AddMvc()注入MVC服务,透过DI可以在Controller建构子中引用其他DI过的物件,但预设是无法引入其他的Controller实例的,本文将说明如何在Controller中使用其他Controller实例。

补充DI项目

找到Startup.csConfigureServices方法编辑以下项目。

public void ConfigureServices(IServiceCollection services) {
    // ...something...
    services.AddMvc()
        .AddControllersAsServices(); // 加入這個項目將Controller也作為DI項目
    // ...something...
}

在Controller使用

开启要使用其他Controller的Controller,并在建构子加入DI项目。如此就可以在Action中使用其他Controller的Action。

public partial class ThisController : Controller {
    OtherController OtherController { get; set; }
    public ThisController(
        OtherController otherController, // 在建構子使用其他Controller實例
        // ...something parameters....
        ) {
        OtherController = otherController;
    }
}

 

有关详细的原理说明可以参考这篇文章

来自:https://www.dazhuanlan.com/2020/03/19/5e736d1cdffe3/