Blazor Web에는 세가지의 서비스가 있습니다. 서비스 세개인 'Singleton, Transient, Scoped'의 차이점을 살펴보겠습니다.
· Singleton
- 많이 알려진 싱글톤 타입과 동일하게 프로그램 내에 단 한개의 싱글 인스턴스만 존재하여 갱신되지 않습니다.
· Transient
- '일시적인' 이라는 뜻으로 스크립트 또는 요청마다 갱신되어 새로운 인스턴스를 가지게 됩니다.
· Scoped
- Singleton과 Transient의 중간 형태로 사용자가 웹에 접속한 시점에 갱신이 됩니다. Singleton과 다르게 전역으로 모두에게 동일한 인스턴스가 아닌 개개인마다 각각의 인스턴스를 가지도록 합니다.
· 예시
- 세개의 서비스를 생성하고 GUID를 가지고 있도록하고 이것이 어떻게 바뀌는지 보도록 하겠습니다.
public class SingletonService : IDisposable
{
public Guid ID { get; set; }
public SingletonService()
{
ID = Guid.NewGuid();
}
public void Dispose()
{
Console.WriteLine("SingletonService Disposed");
}
}
public class TransientService : IDisposable
{
public Guid ID { get; set; }
public TransientService()
{
ID = Guid.NewGuid();
}
public void Dispose()
{
Console.WriteLine("TransientService Disposed");
}
}
public class ScopedService : IDisposable
{
public Guid ID { get; set; }
public ScopedService()
{
ID = Guid.NewGuid();
}
public void Dispose()
{
Console.WriteLine("ScopedService Disposed");
}
}
- 세개의 클래스를 생성하고 각 서비스의 이름으로 서비스하도록 합니다.
//Program.cs
...
builder.Services.AddSingleton<SingletonService>();
builder.Services.AddTransient<TransientService>();
builder.Services.AddScoped<ScopedService>();
...
- 세개의 서비스를 실행합니다.
- 각 이름에 맞게 서비스를 설정하여 서비스하도록 합니다.
@page "/"
@using BlazorApp.Data;
@inject SingletonService singleton;
@inject TransientService transient;
@inject ScopedService scoped;
<div>
<h1>Singleton</h1>
Guid: @singleton.ID;
<br /><br />
<h1>Transient</h1>
Guid: @transient.ID;
<br /><br />
<h1>Scoped</h1>
Guid: @scoped.ID;
</div>
@code {
}
- 단순히 페이지에 접속하면 각 서비스의 GUID를 출력하도록 합니다.
- 변경될때마다 빨간색 사각형을 표시하였습니다.
- Singleton은 한번도 변하지 않았으며, Transient는 다른 페이지를 호출하고 돌아올때 갱신됩니다.
- Scoped는 페이지를 새로고침(새로운 연결)을 할 때마다 갱신되는것을 볼 수 있습니다.
'server > web server' 카테고리의 다른 글
[Web] Blazor에 자바스크립트(JS) 연동 (0) | 2023.02.24 |
---|---|
[Web] 다이얼로그박스 및 유효성 검사 (0) | 2023.02.24 |
[Web] Dependency Injection (0) | 2023.02.24 |
[Web] 템플릿 컴포넌트 (0) | 2023.02.24 |
[Web] Cascading 파라미터 (0) | 2023.02.24 |