Здравствуйте, 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 и сложно для подмены для тех же тестов.
”Жить стало лучше... но противнее. Люди которые ставят точку после слова лучше становятся сторонниками Путина, наши же сторонники делают акцент на слове противнее ( ложь, воровство, лицемерие, вражда )." (с) Борис Немцов