저는 ABCProcessor, PQRProcessor와 같은 여러 구현을 갖는 IProcessor라는 인터페이스가 하나 있습니다. 외부 매개 변수를 기반으로 특정 프로세서를 사용하고 싶습니다. StructureMap을 사용하여 어떻게 동일한 작업을 수행 할 수 있습니까?StructureMap - 조건부 클래스를 입력하십시오.
나는 동일한 이름의 인스턴스를보고있다.
저는 ABCProcessor, PQRProcessor와 같은 여러 구현을 갖는 IProcessor라는 인터페이스가 하나 있습니다. 외부 매개 변수를 기반으로 특정 프로세서를 사용하고 싶습니다. StructureMap을 사용하여 어떻게 동일한 작업을 수행 할 수 있습니까?StructureMap - 조건부 클래스를 입력하십시오.
나는 동일한 이름의 인스턴스를보고있다.
당신은 공장 패턴을 사용할 수 있습니다
public interface IProcessorFactory
{
IProcessor Create(int dropDownValue);
}
public class ProcessorFactory : IProcessorFactory
{
private readonly IContainer _container;
public ProcessorFactory(IContainer container)
{
_container = container;
}
public IProcessor Create()
{
if(//your condition)
return _container.GetInstance<ABCProcessor>();
_container.GetInstance<PQRProcessor>();
}
}
(또는 단순히 요구 대신 컨테이너의 의존성 주입) 다음 등을 간단하게
private readonly IProcessorFactory _processorFactory;
public MvcController(IProcessorFactory processorFactory)
{
_processorFactory = processorFactory;
}
public void Method()
{
var processor = _processorFactory.Create();
}
문제에 대한 가장 좋은 해결책은 숨기는 것입니다 IProcessor
:
public sealed ProxyProcessor : IProcessor
{
private readonly ABCProcessor abc;
private readonly PQRProcessor pqr;
private readonly IProcessorConfig config;
public ProxyProcessor(ABCProcessor abc, PQRProcessor pqr, IProcessorConfig config) {
this.abc = abc;
this.pqr = pqr;
this.config = config;
}
// Implement IProcessor methods to forward to the CurrentProcessor.
public void Process() => CurrentProcessor.Process();
private IProcessor CurrentProcessor => config.ProcessorType == "ABC" ? abc : pqr;
}
이렇게하면 런타임에 올바른 구현으로 위임 할 수 있습니다. 고객은 런타임에 결정할 때이라는 사실을 알지 못합니다. 이제 소비자에게 ABCProcessor
또는 PQRProcessor
중 하나를 주입하는 대신 ProxyProcessor
을 소비자에게 주입합니다.
IProcessor processor =
new ProxyProcessor(
abc: new ABCProcessor(),
pqr: new PQRProcessor(),
config: new SqlProcessorConfig("constr"));
참고 : 예를 들어, 이것은 ProxyProcessor
의 객체 그래프의 모양 수있는 방법입니다 소비자를 변화시킨다. 소비자들은 잊혀지지 않습니다.
팩토리가 올바른 추상화가 아닌 이유에 대해 자세히 알고 싶다면 this article을 읽어보십시오.
"외부 매개 변수"란 무엇입니까? – Steven
외부 매개 변수는 프로세서 선택을 결정하는 구성 키와 같습니다. – Anup
값이 일정 할 때는 조건부가 필요하지 않습니다. 구성 값은 응용 프로그램 수명 동안 변경되지 않으므로 해당 값을 기준으로 sreucturemap을 무조건 구성 할 수 있습니다. – Steven