ASP.NET Core DI 주입 대상 을 수 동 으로 가 져 오 는 방법
의존 주입(Dependency injection,DI)은 대상 과 협력 자 또는 의존 항 간 의 느슨 한 결합 을 실현 하 는 기술 이다.작업 을 수행 하 는 데 사용 되 는 이 대상 들 을 직접 인 스 턴 스 화 작가 나 정적 참조 가 아 닌 특정한 방식 으로 제공 합 니 다.
ASP.NET Core DI 는 일반적으로 Configure Services 설정 을 통 해 다음 과 같은 구조 함수 주입 대상 을 사용 합 니 다.
private IValueService _valueService;
public ValueController(IValueService valueService)
{
_valueService = valueService;
}
그럼 주입 대상 을 수 동 으로 가 져 오 면 요?첫 번 째 획득 방법(때로는 얻 지 못 할 수도 있 고 추천 하지 않 을 수도 있 습 니 다):
var services = new ServiceCollection();
var provider = services.BuildServiceProvider();
var _valueService = provider.GetService<IValueService>();
두 번 째 획득 방법(추천 사용):
public void Configure(IApplicationBuilder app)
{
ServiceLocator.Instance = app.ApplicationServices;
}
public static class ServiceLocator
{
public static IServiceProvider Instance { get; set; }
}
public void SomeRandomMethod()
{
var valueService = ServiceLocator.Instance.GetService<IValueService>();
// Do something with service
}
보충:주의해 야 할 것 은ServiceLocator.Instance.GetService<T>();
을 사용 하면 AddTransient 와 AddSingleton 이 주입 한 대상 만 가 져 올 수 있 고 AddScoped(요청 생명주기 내 유일한)가 주입 한 대상 을 가 져 올 수 없습니다.가 져 올 수 없 는 것 이 아니 라 구조 함수 가 가 져 온 것 은 같은 대상 이 아 닙 니 다.즉,가 져 온 대상 이 공유 되 지 않 았 습 니 다.예 를 들 어 IUnitOfWork 를 사용 합 니 다.그러면 요청 수명 주기 내의 주입 대상 을 어떻게 수 동 으로 가 져 옵 니까?방법 은 다음 과 같다.
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection;
namespace Sample.Domain
{
public class SampleDomainService : IDomainService
{
private IUnitOfWork _unitOfWork;
public SampleDomainService(IHttpContextAccessor httpContextAccessor)
{
_unitOfWork = httpContextAccessor.HttpContext.RequestServices.GetService<IUnitOfWork>();
}
}
}
IHttpContextAccessor 인 터 페 이 스 는Microsoft.AspNetCore.Http.AbstractionsNuget
프로그램 패키지 에 있 습 니 다.참고 자료:
이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가치 가 있 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
3주차 DI, IoC, POJODI, IoC, POJO 7장 p.234 IoC/DI -제어의 역전/의존성 주입 스프링의 IoC(Inversion of Control / 제어의 역전)라고도 하는 DI(Dependency Injection / 의존성...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.