Я реализовал шаблон стратегии. У меня есть базовый интерфейс, и я буду выбирать, какую реализацию этого интерфейса я буду использовать во время выполнения. Проблема в том, что я не знаю элегантного способа, которым я мог бы заполнить объект для хранения всех моих реализаций без их жесткого кодирования (создания новых) следующим образом:
public class FixMessageFormatter
{
List<IMessageFormat> _messageFormats = new List<IMessageFormat>{ new MassQuoteMessageFormat(), }
// ... Other code.
}
Это не элегантно , Если у меня есть более 50 реализаций IMessageFormat
, это может быть ужасно быстро. Я слышал о внедрении зависимостей, но не знал, как применить его к этому простому примеру.
Для контекста ниже приведен мой интерфейс и одна реализация.
Интерфейс
public interface IMessageFormat
{
List<FixMessageType> MessageType { get; }
bool IsProperType(FixMessageType fixMessageType);
StringBuilder FormatMessage(FixMessage fixMessage);
}
Реализация
public class MassQuoteMessageFormat : IMessageFormat
{
public List<FixMessageType> MessageType => new List<FixMessageType>{ FixMessageType.MassQuote };
public StringBuilder FormatMessage(FixMessage fixMessage)
{
var stringBuilder = new StringBuilder();
// ... Code
return stringBuilder;
}
public bool IsProperType(FixMessageType fixMessageType)
{
return MessageType.Contains(fixMessageType);
}
}