IServiceCollection 和 IMvcBuilder 之间是啥关系?

Posted

技术标签:

【中文标题】IServiceCollection 和 IMvcBuilder 之间是啥关系?【英文标题】:what is relationship between IServiceCollection and IMvcBuilder?IServiceCollection 和 IMvcBuilder 之间是什么关系? 【发布时间】:2021-01-04 23:36:04 【问题描述】:

我正在学习 Asp.NET Core 3.1。

在我们开始项目时注意到了这一点。 它将转到 ConfigureServices 并注入一个服务。

   public void ConfigureServices(IServiceCollection services)
    
        services.AddControllersWithViews();
    

我的问题是为什么服务可以使用这些扩展方法?

我检查了框架。

IServiceCollection 是一个接口。 IMvcBuilder 接口中有一个叫做Services 的属性。

但仍然不明白这种关系是什么。 .NET 如何知道 IServiceCollection 服务可以使用 AddControllersWithViews()、AddMvc()...等扩展方法?

谢谢。

【问题讨论】:

【参考方案1】:

IServiceCollection 表示将服务注册到 IoC 容器中的方式。那里的扩展方法是通用的,用于简化其他服务的配置。

扩展方法需要一些东西:

    带有this 参数的方法
    public static void AddSomething(this IServiceCollection ...)
    
    命名空间导入到包含具有扩展方法的类的命名空间。

IMvcBuilder 恰好是 AddMvc 返回以进一步配置 ASP.NET Core MVC。

【讨论】:

以上是关于IServiceCollection 和 IMvcBuilder 之间是啥关系?的主要内容,如果未能解决你的问题,请参考以下文章

前端老牌框架衰退,IMVC(同构 MVC)成未来趋势?

使用 IServiceCollection.AddTransient、IServiceCollection.AddSingleton 和 IServiceCollectionAddScoped 方法的

使用 IServiceCollection.AddTransient、IServiceCollection.AddSingleton 和 IServiceCollectionAddScoped 方法的

干货 | IMVC(同构 MVC)的前端实践

IServiceCollection 和 IMvcBuilder 之间是啥关系?

IServiceCollection.AddScoped,委托为异步操作