2016-08-09 2 views
0

Я думал о том, как работает инверсия управления при работе со списками. Например, Somthing, как это будет работать нормально: -Инверсия управления в списке

public class MyClass 
{ 
private readonly IMyInterface _instance; 

public MyClass(IMyInterface instance) 
{ 
    _instance = instance; 
} 

ли ниже нарушение Open/Closed SOLID Принцип конструкции, и если да, то как можно список можно реализовать с использованием IoC, как в приведенном выше примере?

private readonly List<IMyInterface> _interface; 

    public MyClass() 
    { 
     _interface= new List<IMyInterface>(); 
     _interface.Add(new Class1()); 
     _interface.Add(new Class2()); 
     _interface.Add(new Class3()); 
    } 
... 

Что я имею в виду здесь, как реализовать коллекцию списков и передать ее конструктору с помощью IoC?

+3

Почему вы не вводить список с помощью конструктора, как вы делали выше? –

+0

@YacoubMassadDo у вас есть пример? – user1319501

+1

Это просто, как 'public MyClass (List ). {_interface = list;}' –

ответ

1

Существует 3 способа архивирования инъекции зависимостей (DI).

  1. инъекции Constructor: public MyClass(List<IMyInterface> tobeInjectedList)
  2. недвижимости инъекции: public List<IMyInterface> TobeInjectedList { get; set; }
  3. инъекции Метод:

    List<IMyInterface> _injectedList; 
    public void Inject(List<IMyInterface> tobeInjectedList) 
    { 
        _injectedList = tobeInjectedList; 
    } 
    

Побочный проблема, я могу заметить, от вас кода является то, что вы чрезмерно использованием new ключевое слово, которое сделает вас классом в значительной степени зависеть от группы других классов, в основном, это кошмар. Я предлагаю шаблон проектирования завода для решения этой проблемы.

http://www.dofactory.com/net/factory-method-design-pattern

Смежные вопросы