2017-04-21 1 views
2

특정 작업에 두 개의 내부 "시퀀서"가 필요한 ASP.NET 코어 프로젝트가 있습니다. Startup.cs ConfigureServices 방법에서동일한 인터페이스를 구현하는 두 개의 싱글 톤 서비스를 만듭니다.

:

services.AddSingleton<ISequencer, ProfileSequencer>(); 

을 물론 나는 인터페이스와 구현이 정의되어, 그것은 잘 작동하고 첫 번째는 다음과 같이 구현되었다. 그러나 동일한 인터페이스를 구현하지만 약간 다른 구현을 가진 두 번째 시퀀서를 추가하는 방법을 잘 모르겠습니다.

services.AddSingleton<ISequencer, ChargeSequencer>(); 

ASP.NET은 이것에 대해 불평하지 않습니다,하지만 난 내 수업에 ISequencer를 주입 할 때 지금, 나는 그것을 사용하는 싱글 알고있는 방법을 상상할 수 없다. 나는 두 번째 싱글 톤이 첫 번째 싱글 톤을 효과적으로 대체한다고 의심한다.

여기에는 잘못된 디자인 결정이있을 수 있으므로 동일한 인터페이스를 구현하는 두 개의 서로 다른 싱글 톤을 주입 할 수있는 방법이나 필요하다면이 문제에 대한 또 다른 합리적인 방법을 설명하는 대답을 수락하겠습니다. 감사!

+1

http://stackoverflow.com/questions/39174989/how-to-register-multiple-implementations-of-the-same-interface-in-asp-net-core 중복 가능성 –

+0

링크 주셔서 감사합니다. 본질적으로 중복이다. 다른 서비스 유형에 대한 다른 솔루션을 찾았 기 때문에 싱글 톤 구현에 대한 내 검색어에서 끊겼습니다. – k3davis

답변

0

동일한 인터페이스의 두 가지 서비스를 등록 할 수 없습니다. 두 번째 등록이 먼저 무시됩니다. 당신이 주입

ISomeSpecificSequencer : ISequencer {} 
IOtherSpecificSequencer : ISequencer {} 

2)를 사용하여 공장 패턴 코드에 따라서

interface ISequencerFactory 
{ 
    ISequencer GetSequencer(ISequencerOptions someOptions) 
} 

:

1) 중첩 된 인터페이스를 작성하고 등록을 사용하지만 난 당신에게 빠른 문제의 해결책을 제시 ISequencerFactory을 입력 한 다음 몇 가지 옵션 (string, enum, Type 등)을 사용하여 필요한 클래스를 결정하십시오.

+0

이것은 내 부분에 대한 나쁜 질문에 대한 좋은 해결책입니다 - 감사합니다. FWIW 나는 SQL/저장 프로 시저에서 시퀀서를 만드는 것을 다시 생각하고 있는데, 이것은 아마도 처음부터 내 자신을 생성하는 것보다 안전 할 것입니다. – k3davis

+0

두 번째 등록이 첫 번째 등록보다 우선 적용됩니까? 나는 그것에 관한 골동품입니다. –

+0

@MohammedNoureldin 나는 과거에 그것을 테스트했다고 생각합니다. 나는'IServiceCollection' 클래스 저장소 매핑'인터페이스> 구현'을 이해합니다. 인터페이스를 두 번째 추가하면 첫 번째 매핑이 무시됩니다. –

관련 문제