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

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


O>>Как такие сценарии правильно строятся без передачи и хранения ссылок на контейнеры ?


Doc>Задача состоит в создании экземпляра класса так ведь? А подобную задачу решат шаблон Factory.

Doc>
Doc>public class A 
Doc>{
Doc>    private IMyFactory _myFactory;
    
Doc>    public A (IMyFactory myFactory)
Doc>    {
Doc>        _myFactory = myFactory;
Doc>    }


Doc>    public IEnumerable<IMyClass> CalculateSomething()
Doc>    {
Doc>        return Enumerable.Range(1,100).Select( i => _myFactory.CreateSomething(i));
Doc>    }
Doc>}
Doc>


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

public class MyFactory : IMyFactory
{
    IContainer container;

    public MyFactory(IContainer container)
    {
    this.container = container;
    }
     
    IMyClass CreateSomething(int i)
    {
       return container.Resolve<IMyClass>(new TypedParameter(type(int), i);
    }
}


т.е. пока не ясно как избавиться от container, т.к. конструктор типа имплементирующего IMyClass может принимать массу аргументов которые хотелось бы брать из контейнера а не передавать явно.
”Жить стало лучше... но противнее. Люди которые ставят точку после слова лучше становятся сторонниками Путина, наши же сторонники делают акцент на слове противнее ( ложь, воровство, лицемерие, вражда )." (с) Борис Немцов
Отредактировано 19.05.2018 5:07 okon . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.