Ahojte,
Stretol som sa s pojmom Dependency injection. Pozeram si nejake clanky, ale stale mi nie je celkom jasne o co ide.. Vedel by mi to niekto v kratkosti na nejakom pripade v C# vysvetlit ? Dakujem
Docela pěkný je článek v AJ: http://tutorials.jenkov.com/dependency-injection/index.html
Pokusím se to velmi rychle demonstrovat na příkladě:
Máš třídu, která má v konstruktoru řadu dalších tříd. Abys vytvořil tyto třídy musíš jim předat do konstruktoru nějaké další objekty. Je jasné, že vytvoření takového objektu by bylo vcelku pracné a stejně tak i úprava takového kódu. Tuto situaci se snaží řešit dependecy injection frameworky, které ti ten objekt vytvoří sami.
Většinou je potřeba na objekt přidat interface a DI už sama ví, jak vytvořit instanci pro daný interface.
To bylo tak rychle, že jsi ani nestihl ten příklad :)
DI spočívá jen v tom, že věci, na kterých je nějaký objekt závislý, se dodávají zvenku, aby je ten dotyčný objekt nemusel řešit a snadno se nahrazovaly.
Volba implementace a řešení složitějších závislostí apod. je přímo související, ale jiná věc.
Vdaka. S tymto vysvetlenim sa mi uz aj tie clanky citali jednoduchsie :) V tejto suvislosti ma napadla este jedna vec. Narazil som na isty framework Ninject, ktory by mal pracu s DI ulahcovat. (ak to chapem spravne).
Skusal som to podla tohto, ale stale mi to nie je celkom jasne: http://www.codeproject.com/Articles/424749/Dependency-Injection-Using-Ninject
Zrejme budu na vine moje diery v AJ :/
Ninject je jeden z DI frameworků pro .NET. Tady jich máš vypsáno mnohem víc: http://www.hanselman.com/blog/ListOfNETDependencyInjectionContainersIOC.aspx
Myslím, že komerčně nejpoužívanějším je Castle.
Když nad tím tak přemýšlím, bylo by to docela dobré téma na článek
Teď se o DI objevilo i něco málo na develu: http://devel.cz/otazka/ktery-ioc-di-kontejner-v-net-4-0?utm_source=friday_newsletter&utm_medium=email&utm_campaign=2013_02_15
Mne sa tomu tazko chapalo, prrtoze som DI vlastne bezne pouzival bwz toho abny som vedel, ze ide o nejaky patter, pretro ma to trochu miatlo :P Co je ninject cca rozumiem, nerozumiem tomu ako funguje a hlavne preco ho vlastne pouzivat ...
Nasiel som si celkom pekny tutorial:
http://www.codeproject.com/…sing-Ninject.
Ak tomu teda chapem spravne, Ninject, alebo iny kontajner sa vlastne stara o to, ze v pripade ze sa cez neho necham vytvorit instancie, postara sa mi o "vyplnenie" vsetkych zavislosti, resp o to, aby ta instancia mohla "zit".
V tom kode akurat nerozumiem poslednemu kroku.
kernel.Bind<IWeatherStation>().To<WeatherStation>().WithConstructorArgument
(
"weatherConditions",
new WeatherCondition[]
{
new WeatherCondition{ Name = "HOT", Color = "Yellow" },
new WeatherCondition{ Name = "COLD", Color = "Blue" },
new WeatherCondition{ Name = "STORM", Color = "DarkGray" },
new WeatherCondition{ Name = "SNOW", Color = "White" },
new WeatherCondition{ Name = "WINDY", Color = "Gray" }
}
);
Ak to chapem spravne, ninjectu pomocou ".WithConstructorArgumen" poviem ako ma vyplnit druhy parameter ktory prijima WeatherStation. Prvy nie je nutny, pretoze to som definoval predtym a teda mu dohodi instanciu ConsoleDisplay. Preco tam je ale tento string ""weatherConditions"" ?
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku