Re[8]: как ресолвить не передавая ссылки на контейнер ( DI )
От: okon  
Дата: 24.05.18 04:12
Оценка: 5 (1)
Здравствуйте, Sharov, Вы писали:

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




O>>и потом где-то в коде вместо того чтобы делать container.Resolve()



O>>

O>>public class Foo
O>>{
O>>    Foo( Func<MyClass> myClassFactory )
O>>    {
O>>       MyClass instance = myClassFactory();
O>>    }
O>>}

O>>


S>А фабрика-то откуда взялась? Ее же тоже надо resolve'вить. К тому же, мы можем настроить контейнер при создании(resolve)типа использовать фабрику. Т.е. от ссылки на контейнер с последующим resolve мы не ушли.



Она разресолвится автоматом, я же в примере ее зарегистрировал там где региструется все, Foo будет где-то в иерархии и он разресолвится автоматом.

Например самая простая иерархия


public class RootClass
{
    public RootClass( Foo foo )
    {
       ...
    }
}



после создания контейнера вызывается ресолв рута.
Контейнер упоминается только в одном месте в методе CreateContainer и более он не требуется


void CreateContainer()
{

    container.Register<Func<MyClass>>( () => container.Resolve<MyClass>());

     Root = container.Resolve<RootClass>(); 
}
”Жить стало лучше... но противнее. Люди которые ставят точку после слова лучше становятся сторонниками Путина, наши же сторонники делают акцент на слове противнее ( ложь, воровство, лицемерие, вражда )." (с) Борис Немцов
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.