컨트롤러 생성자에서 간단하게 출력창 로그를 남겨보면 매번 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