Фабрика объектов с разными конструкторами
От: licedey  
Дата: 05.11.16 13:55
Оценка:
Есть интерфейс и несколько производных классов которые реализуют метод Validate. В довесок к нему, существует интерейс IPaymentProcessor,
которы применяет все правила, т.е. создает объект и вызвает метод Validate() у Rule1, Rule2, итд.
Задача: реализовать IPaymentProcessor
 public interface IBusinessRule
 {
        bool Validate();
 }

  class Rule1 : IBusinessRule
  {
      public Rule1(string name) { ... }
      bool Validate() { ... }
  }

  class Rule2 : IBusinessRule
  {
      public Rule1(int month, int year) { ... }
      bool Validate() { ... }
  }

  interface IPaymentProcessor
  {
    bool MakePayment(CreditCard card);
  }

  class MyPaymentProcess : IPaymentProcessor
  {
    public bool MakePayment(CreditCard card)
     {
        // Вот тут засада. Если нам нужно добавить/удбрать правило, меняется конструктор итд.,
        // То надо лезть в этот код. Что совсем не правильно.
        var rules = new List<IBusinessRule>() { new Rule1(card.Name), new Rule2(card.Month, card.Year) };  
        foreach(var r in rules) if(!r.Validate()) { return false; }
        return true;
    }
  }


Вопрос: как заменить создание списка на лету, какой-нибудь фабрикой или контейнером, чтобы уменьшить связность? Желательно из готовых решений под .NET, еще лучше через Ninject (так в требованиях).
Копая в сторону Ninject/DI, натыкался на проблему: либо непонятно как разное кол-во параметров в конструкторе,
либо непонятно в по какому принципу делать ninjectKernel.Get, или в нашем случае что-то вроде GetAll, для перечисления.
ninject фабрика
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.