컨트롤러 생성자에서 간단하게 출력창 로그를 남겨보면 매번 request 마다 controller 클래스가 new 되는 것을 확인할 수 있습니다.
<ValuesController.cs>
using System.Collections.Generic;
using Microsoft.AspNetCore.Mvc;
namespace WebApplication1.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class ValuesController : ControllerBase
{
public ValuesController()
{
string tid = System.Threading.Thread.CurrentThread.ManagedThreadId.ToString();
System.Diagnostics.Trace.WriteLine("ValuesController Constructor [" + tid + "]");
}
<출력 창>
ValuesController Constructor [7]
ValuesController Constructor [7]
ValuesController Constructor [7]
ValuesController Constructor [7]
ValuesController Constructor [7]
다른 서비스처럼 controller 를 singleton으로 사용하려면
해당 controller 를 singleton으로 등록하고(AddSigleton) service 로 사용하도록 (AddControllersAsServices) 합니다.
(각 controller 를 모두 singleton으로 등록해야 함)
<Startup.cs>
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
// bind all Controller classes as singletons
services.AddSingleton<ValuesController, ValuesController>();
// tell framework to obtain Controller instances from ServiceProvider.
services.AddMvc().AddControllersAsServices();
}
처음 request 가 오면 controller 가 생성되고 이후 재활용 되므로
"ValuesController Constructor [7]" 출력은 한번만 발생합니다.
'C#' 카테고리의 다른 글
c# stack size 확인 (0) | 2022.02.24 |
---|---|
숫자 범위 추출 및 확장 (0) | 2021.11.03 |
C# LZ4 (0) | 2021.10.20 |
dictionary 에 action 매핑시 instance method 호출 방법 (0) | 2021.10.16 |
[AppMetrics 3.1.0] ASP.NET Core 2.2 모니터링 with InfluxDB, Grafana (0) | 2019.08.06 |
[asp.net] asp.net core 2.2 iis 게시 (0) | 2019.08.03 |
C# (0) | 2011.05.15 |
WPF (0) | 2011.05.08 |