Dobra, przyznaję się bez bicia, że nadal nie jestem przekonany do tej "magii" IoC. No bo serio. W czym to:
class MyClass
{
IMyInterface interface;
public MyClass()
{
interface = MagicContainer.Resolve<IMyInterface>();
}
}
jest lepsze od tego:
class MyClass
{
IMyIntercae interface;
public MyClass(IMyInterface iface)
{
interface = iface;
}
}
W drugim przypadku mogę do konstruktora dać cokolwiek, co implementuje interfejs. Czy w pierwszym mogę użyć czegokolwiek? Przykład - zapis danych na dysk. Załóżmy, że mam kilka formatów zapisu - w związku z tym kilka klas implementujących interfejs: ISaveMe.
I dalej nie rozumiem w czym to:
Singleton.Instance.DoSomething();
jest gorsze od tego:
MagicContainer.Resolve<Singleton>().DoSomething();
Bo w pierwszym przypadku muszę napisać kilka linijek kodu więcej, żeby stworzyć tego singletona?
Żeby użyć dobrego kontenera IoC muszę go najpierw pobrać i jakoś go ogarnąć.