Информация об изменениях

Сообщение Re[10]: как ресолвить не передавая ссылки на контейнер ( DI от 24.05.2018 11:53

Изменено 24.05.2018 11:55 okon

Re[10]: как ресолвить не передавая ссылки на контейнер ( DI )
Здравствуйте, Sharov, Вы писали:

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


O>>после создания контейнера вызывается ресолв рута.

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

O>>
O>>void CreateContainer()
O>>{

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

O>>     Root = container.Resolve<RootClass>(); 
O>>}

O>>


S>Он будет упоминаться в каждом классе, где как минимум требуется RootClass или еще чего. Т.е. опять же, его всюду придется инжектить, хотя бы через конструктор класса, там же, в конструкторе, получить от него

S>все необходимое и забыть про него.

Для RootClass не совсем я понял, например если нам нужен RootClass где-то внутри мы просто укажем его в конструкторе
Вот например, все разресолвится без передачи контейнера

[c#]

public class RootClass
{


RootClass( Foo foo)
{

}
}

public class MyClass
{
public MyClass( RootClass root)
{
}
}


public class Foo
{
Foo( Func<MyClass> myClassFactory)
{
var myClass = myClassFactory();
}
}

[c#]
Re[10]: как ресолвить не передавая ссылки на контейнер ( DI
Здравствуйте, Sharov, Вы писали:

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


O>>после создания контейнера вызывается ресолв рута.

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

O>>
O>>void CreateContainer()
O>>{

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

O>>     Root = container.Resolve<RootClass>(); 
O>>}

O>>


S>Он будет упоминаться в каждом классе, где как минимум требуется RootClass или еще чего. Т.е. опять же, его всюду придется инжектить, хотя бы через конструктор класса, там же, в конструкторе, получить от него

S>все необходимое и забыть про него.

Для RootClass не совсем я понял, например если нам нужен RootClass где-то внутри мы просто укажем его в конструкторе
Вот например, все разресолвится без передачи контейнера


public class RootClass
{


   RootClass( Foo foo)
   {

   }
}

public class MyClass
{
   public MyClass( RootClass root)   
   {
   }
}


public class Foo
{
    Foo( Func<MyClass> myClassFactory)
    {
    var myClass = myClassFactory();
    }
}