질문
기본 Asp.net Core IoC 컨테이너를 사용하면 인터페이스에 여러 객체 유형이 등록되어 있고 해당 인터페이스에 대한 서비스를 요청하면 IoC는 항상 등록 된 마지막 객체 유형을 반환합니다. 인터페이스? .Net 핵심 서비스 컨테이너, 인터페이스에 등록 된 마지막 서비스를받을 수 있습니까?
는 (나는 닷넷 코어 의존성 삽입 (Dependency Injection) 문서를 읽고이 https://docs.microsoft.com/en-us/aspnet/core/fundamentals/dependency-injection 해결하지 않는 것 같습니다.)의 난이 인터페이스 있다고 가정 해 봅시다데모를
을 :
interface ITest
{
void Create(int id);
}
과 이러한 클래스 :
public class TestOne: ITest {
int id;
public void Create(int id) {
this.id = id;
}
}
public class TestTwo: ITest {
int id;
public void Create(int id) {
this.id = id;
}
}
public class TestThree: ITest {
int id;
public void Create(int id) {
this.id = id;
}
}
나는 다음과 같은 코드를 작성할 경우 startup.cs에서
services.AddSingleton<ITest, TestTwo>();
services.AddSingleton<ITest, TestThree>();
services.AddSingleton<ITest, TestOne>();
Configure
방법 : 지금은 다음 코드를 추가 ConfigureServices
방법에 Startup.cs D에
var serviceCollection = app.ApplicationServices.GetServices<ITest>();
을 나는의 컬렉션을 얻을 개체 : TestTwo
, TestThree
및 TestOne
순으로 나열됩니다. 항상이 경우 TestOne
에서, 인터페이스에 등록 된 마지막 객체의 인스턴스를 반환하는 것
var service = app.ApplicationServices.GetService<ITest>();
다음 startup.cs에서
는 Configure
방법 나는이 코드를 작성하는 경우.
인터페이스에 여러 객체 유형이 등록되어 있고 IoC가 해당 인터페이스에 대한 서비스를 요청한 경우 항상이 인터페이스에 등록 된 마지막 객체 유형을 반환합니다.
매번 마지막으로 가져 오는 경우에도 마지막으로 원하지 않을 때 무엇을합니까? 해당 서비스 컬렉션을 반복 할 것입니까? 내장 된 IOC 컨테이너로 각 인스턴스에 이름을 붙일 수없는 것처럼 보입니다. –
제 경우에는 마지막 것을 원합니다. 그러나 나는이 행동에 의지 할 수 있다는 것을 알고 싶다.(IoC 컨테이너를 확장하지 않으면 각 이름에 이름을 붙일 수 없다는 것은 사실입니다. 어딘가에 stackoverflow에서 확장 메소드 예제를 보았지만 안타깝게도 검색 할 때 찾지 못했습니다. 여기 어딘가에 있습니다. 그래도 필요하다면.) –
IOC 컨테이너 확장 ... 나쁜 생각은 아닙니다. 마커 인터페이스 만 사용합니다. –