c# - 净核心 : Are MVC Controllers default Singleton?

标签 c# .net .net-core

我想知道 .NET MVC Core 的 Controller 类是否默认为 Singleton?

如果不是,那么框架是否会为每个请求创建多个 Controller 类对象?创建此类的新实例不是开销更大吗?

在 Java 等其他编程语言中,只创建了一个 Controller 类实例 (Servlet),并且每个请求都由一个新线程处理。在 .Net 中不是很相似吗?

最佳答案

它们实际上被声明为 Transient:

public static IMvcBuilder AddControllersAsServices(this IMvcBuilder builder)
{
    if (builder == null)
    {
        throw new ArgumentNullException(nameof(builder));
    }

    var feature = new ControllerFeature();
    builder.PartManager.PopulateFeature(feature);

    foreach (var controller in feature.Controllers.Select(c => c.AsType()))
    {
        builder.Services.TryAddTransient(controller, controller);
    }

    builder.Services.Replace(ServiceDescriptor.Transient<IControllerActivator, ServiceBasedControllerActivator>());

    return builder;
}

取自:https://github.com/aspnet/AspNetCore/blob/c7cb8467bfce721e2d66ef3862cd8c7c1fdbb421/src/Mvc/Mvc.Core/src/DependencyInjection/MvcCoreMvcBuilderExtensions.cs

第 (150) 行

关于c# - 净核心 : Are MVC Controllers default Singleton?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57553401/

相关文章:

c# - 获取非项目文件的FileCodeModel

c# - 如何正确地使用 SHA256 和 X.509 对 XML 进行签名?

c# - 在表单中提交下拉列表的值和文本

c# - MVC 中的 URL 编码 token

asp.net-core - Azure 应用程序配置和 IOption|快照|监视器模式

c# - 使用 EF Core 级联删除

c# - Monotouch EKEvent 注释未保存

c# - 如何检索数据库的已用大小?

c# - 传递 IEnumerable<T> 时 T 重要吗?

c# - 如何设计两个相似(但不完全)的类?