ASP.NET Core 기본 주입 방식에서 다중 주입 방법 (여러 방식)
interface
실현은 모두 하나의 구체적인 실현만 존재한다(어떤 사람들은 이런 상황을 10세대 단일 전송 모델이라고 놀린다). 이때 코어의 기본적인 주입 방식은 우리의 수요를 지원하지만 일부 추상적인 정의의 실현에 있어 우리는 여러 가지 구체적인 실현이 있을 수 있다. 프로젝트에서우리는 구체적인 수요에 따라 서로 다른 실현을 선택할 수 있다.먼저 우리의 업무 장면의 예를 구체적으로 살펴보고 다음과 같은
interface
와 그 두 가지 구체적인 실현이 있다고 가정하자. public interface ILogicService
{
int GetNo();
}
public class LogicSericeImpt1 : ILogicService
{
public int GetNo()
{
return 1;
}
}
public class LogicSericeImpt2 : ILogicService
{
public int GetNo()
{
return 2;
}
}
예는 매우 간단하다. 바로 서로 다른 실현이 서로 다른 번호를 되돌려주는 것이다. 다음은 주입된 상황에서 어떻게 서로 다른 실현을 얻을 수 있는지 설명한다.
직접 주입
IServiceProvider
방식코어에서
IServiceProvider
는 구체적인 응용에 직접 주입할 수 있기 때문에 직접적으로IServiceProvider
를 통해 구체적인 실현을 얻는 방식이 생겼다.1. 통과
GetService
방식우선 주입 구체적 실현
services.AddTransient();
services.AddTransient();
그리고 구조 함수에서 다음과 같은 방식으로 구체적인 실현을 얻는다
public TodoController(IServiceProvider serviceProvider)
{
var s1FromProvider = serviceProvider.GetService();
var s2FromProvider = serviceProvider.GetService();
}
2.통과
GetServices
방식우선 주입
interface
및 구체적 실현services.AddTransient();
services.AddTransient();
그리고 구조 함수에서 다음과 같은 방식으로 구체적인 실현을 얻는다
public TodoController(IServiceProvider serviceProvider)
{
var logicAllRegs = serviceProvider.GetServices().ToList();
var s1FromAllRegs = logicAllRegs[0];
var s2FromAllRegs = logicAllRegs[1];
}
직접 주입 집합 방식
이런 방식은 사실 주입
IServiceProvider
의 과정을 생략하고 GetServices
에서 얻은 결과를 직접 주입하는 것이다.우선 주입interface
및 구체적 실현services.AddTransient();
services.AddTransient();
그리고 구조 함수에서 다음과 같은 방식으로 구체적인 실현을 얻는다
public TodoController(IEnumerable services)
{
var s1FromServices = services.First();
var s2FromServices = services.Skip(1).First();
}
직주입
Func
공장방식이런 방식으로 우리는 구체적인 실현에 직접 주입하는 것이 아니라
Func
라는 공장에 주입하여 실현했다.일단 저희가 구체적 실현을 주입해야 돼요.services.AddTransient();
services.AddTransient();
그리고 우리는 계속해서 Func라는 공장에 주입했다. 여기서 우리는
int
에 따라 서로 다른 실현을 되돌릴 수 있다. 물론 너도 다른 방식을 사용할 수 있다. 예를 들어string
services.AddSingleton(provider =>
{
Func<int, ILogicService> func = n =>
{
switch (n)
{
case 1:
return provider.GetService();
case 2:
return provider.GetService();
default:
throw new NotSupportedException();
}
};
return func;
});
그리고 구조 함수에서 다음과 같은 방식으로 구체적인 실현을 얻는다
public TodoController(Func<int, ILogicService> funcFactory)
{
var s1FromFunc = funcFactory(1);
var s2FromFunc = funcFactory(2);
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
WebView2를 Visual Studio 2017 Express에서 사용할 수 있을 때까지Evergreen .Net Framework SDK 4.8 VisualStudio2017에서 NuGet을 사용하기 때문에 패키지 관리 방법을 packages.config 대신 PackageReference를 사용해야...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.