Re[4]: как ресолвить не передавая ссылки на контейнер ( DI )
От: okon  
Дата: 19.05.18 05:40
Оценка:
Здравствуйте, Doc, Вы писали:

Doc>Здравствуйте, okon, Вы писали:


O>>Возможно, но пока не понятно как внутри будет выглядеть Factory.CreateSomething, ведь в ней придется либо создавать инстансы вручную, либо как-то ресолвить зависимости.


Doc>Фабрика создает вполне конкретные инстансы вполне конкретных (но только ей известных) типов.

Doc>Если надо создавать другие типы — создается другая фабрика.

Doc>Если посмотрите внимательно, то реализация Factory уже абстракция и прокинута в класс как интерфейс.

Doc>Метод CreateSomething должен возвращать интерфейс ISomething
Doc>Собственно больше абстракций / интерфейсов не требуется.

Имеется ввиду что B может принимать много аргументов конструктора, например

B( int I, IFoo foo, IBar bar )
{
}


В свою очередь Foo : IFoo тоже может иметь сложный конструктор с множеством параметров, через Resolve мы их вычисляем автоматом.

В контейнере мы регистрируем IFoo, IBar а в фабрике как предлагается инстанцировать их ?



Factory
{
  B CreateB( int I )
  {
    return new B(i, new Foo( new X(), new Y() ), new Bar( new Z(), new X() );
  }
}


Вот так не хотелось бы делать, т.к. жестко задается имплементация Foo, Bar и сложно для подмены для тех же тестов.
”Жить стало лучше... но противнее. Люди которые ставят точку после слова лучше становятся сторонниками Путина, наши же сторонники делают акцент на слове противнее ( ложь, воровство, лицемерие, вражда )." (с) Борис Немцов
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.