В дополнение к шаблону стратегии вы также можете создать один адаптер для каждого из ваших базовых решений. Затем используйте стратегию, чтобы изменить их. Я построил аналогично с каждым решением для отчетов, поддерживаемым так называемыми механизмами. В дополнение к решению с переменными отчетами у нас также есть решение с переменным хранилищем - выходные данные могут храниться на сервере SQL или в файловой системе.
Я бы предложил использовать контейнер, а затем инициализировать его с правильным движком, например ::10000
public class ReportContainer{
public ReportContainer ( IReportEngine reportEngine, IStorageEngine storage, IDeliveryEngine delivery...)
}
}
/// In your service layer you resolve which engines to use
// Either with a bunch of if statements / Factory / config ...
IReportEngine rptEngine = EngineFactory.GetEngine<IReportEngine>( pass in some values)
IStorageEngine stgEngine = EngineFactory.GetEngine<IStorageEngien>(pass in some values)
IDeliverEngine delEngine = EngineFactory.GetEngine<IDeliverEngine>(pass in some values)
ReportContainer currentContext = new ReportContainer (rptEngine, stgEngine,delEngine);
затем ReportContainer делегирует работу зависимым механизмам ...