{"id":33480,"date":"2014-07-16T18:35:00","date_gmt":"2014-07-16T15:35:00","guid":{"rendered":"https:\/\/fatihboy.com\/?p=33480"},"modified":"2021-06-17T20:22:35","modified_gmt":"2021-06-17T17:22:35","slug":"dependency-injection-uzerine","status":"publish","type":"post","link":"https:\/\/fatihboy.com\/en\/dependency-injection-uzerine\/","title":{"rendered":"Dependency Injection \u00dczerine"},"content":{"rendered":"<p>&nbsp;&nbsp; E\u011fer sizinle de bir nesne y\u00f6nelimli programla oturumu yapt\u0131ysak mutlaka benden duymu\u015fsunuzdur; \u00dcniversite\u2019de okurken nesne y\u00f6nelimli programlama dersi hocam\u0131z\u0131n kula\u011f\u0131mda yer etmi\u015f bir s\u00f6z\u00fc vard\u0131; nesne y\u00f6nelimli mimarilerin temel bir prensibi vard\u0131r : \u201c<b>SANANE<\/b>\u201d. Bu prensip olabildi\u011fine basit; fakat bir o kadar da ba\u015far\u0131l\u0131 uygulamalar\u0131n \u00f6n\u00fcn\u00fc a\u00e7an bir yakla\u015f\u0131md\u0131r. Ayn\u0131, hayat\u0131n kendisi gibi\u2026 Araba kullan\u0131yorken gaza bast\u0131\u011f\u0131n\u0131zda arac\u0131n nas\u0131l hareket etti\u011fini t\u00fcm detaylar\u0131 ile bilmenize gerek yoktur ya da size t\u00fcm ara\u00e7larca sunulan direksiyon, gaz, fren, debriyaj, vites gibi temel aray\u00fczler\/kontratlar\/s\u00f6zle\u015fmeler sizin arac\u0131 tamamen marka\/model ba\u011f\u0131ms\u0131z olarak kullanman\u0131z i\u00e7in yetmekte. Konuyu biraz detayland\u0131rd\u0131\u011f\u0131m\u0131zda temel yaz\u0131l\u0131m prensiplerinden <b>gev\u015fek ba\u011fl\u0131 (loosely coupled)<\/b> olman\u0131n asl\u0131nda \u201c<em>SANANE prensibi<\/em>\u201d ile nas\u0131l \u00f6zetlendi\u011fini g\u00f6rebilirsiniz. Uygulamalar\u0131m\u0131zda olu\u015fturdu\u011fumuz kontratlar bizleri arka plandaki kar\u0131\u015f\u0131k i\u015f mant\u0131klar\u0131ndan tamamen soyutlayacakt\u0131r. Nas\u0131l\u2019\u0131na, Neden\u2019ine odaklanmaks\u0131z\u0131n kendi uygulamam\u0131z\u0131 geli\u015ftirmeye odaklanmam\u0131za imk\u00e2n sunacakt\u0131rlar. \u0130\u015fte bu noktaya ortaya \u00e7\u0131kan gev\u015fek ba\u011f\u0131n olu\u015fturulmas\u0131\/y\u00f6netilmesi ihtiyac\u0131 i\u00e7in pek \u00e7ok farkl\u0131 y\u00f6ntem geli\u015ftirilmi\u015ftir. Temel ama\u00e7 her zaman i\u00e7in ba\u011f\u0131ml\u0131l\u0131\u011f\u0131n gev\u015fek olmas\u0131, soyutlanmas\u0131 olmu\u015ftur.<\/p>\n\n\n\n<p>&nbsp;&nbsp; Ama\u00e7 ba\u011f\u0131ml\u0131l\u0131\u011f\u0131n gev\u015fek olmas\u0131 olunca, ka\u00e7\u0131n\u0131lmaz olarak, kontratlar\/s\u00f6zle\u015fmeler \u00fczerinden ald\u0131\u011f\u0131m\u0131z hizmetleri yerine getirecek s\u0131n\u0131flar\u0131n olu\u015fturulmas\u0131 i\u015fi s\u0131n\u0131f\u0131m\u0131z\u0131n d\u0131\u015f\u0131na ta\u015f\u0131nmaya ba\u015flam\u0131\u015ft\u0131r. Bir ba\u015fka de\u011fi\u015fle bu ba\u011f\u0131ml\u0131l\u0131klar\u0131m\u0131z kontratlar vas\u0131tas\u0131yla uygulamam\u0131z\/s\u0131n\u0131f\u0131m\u0131z i\u00e7erisine <b>d\u0131\u015far\u0131dan enjekte<\/b> edilmi\u015ftir. \u015eimdi, bu noktada biraz nefes al\u0131p a\u015fa\u011f\u0131daki \u00f6rne\u011fi inceleyelim;<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">[Serializable]\npublic class Ogrenci {\n    public int No;\n    public string Adi;\n    public string Soyadi;\n    public string Bolum;\n}\n\ninternal class OgrenciIslemleri {\n    private readonly XmlDosyaVeriDesposu veriDeposu;\n\n    public OgrenciIslemleri() {\n        veriDeposu = new XmlDosyaVeriDesposu();\n    }\n\n    public void OgrenciKaydet(Ogrenci ogrenci) {\n        try {\n            Console.WriteLine(\"\u00d6\u011frenci kayd\u0131 yap\u0131l\u0131yor...\");\n\n            var referansId = veriDeposu.Kaydet(ogrenci);\n\n            Console.WriteLine(\"\u00d6\u011frenci kayd\u0131 yap\u0131ld\u0131. Referans Id : \" + referansId);\n        }\n        catch (Exception istisna){\n            Console.Error.WriteLine(\"\u00d6\u011frenci kayd\u0131 s\u0131ras\u0131nda beklenmeyen bir hata olu\u015ftu : \" + istisna);\n        }\n    }\n}<\/pre>\n\n\n\n<p>&nbsp;&nbsp; Eminim ki; bu k\u00fc\u00e7\u00fck kod par\u00e7ac\u0131\u011f\u0131n\u0131z inceledi\u011finizde OgrenciIslemleri s\u0131n\u0131f\u0131n\u0131n XmlDosyaVeriDesposu s\u0131n\u0131f\u0131na olan ba\u011f\u0131ml\u0131l\u0131\u011f\u0131 dikkatinizi \u00e7ekmi\u015ftir. Projeniz b\u00fcy\u00fcd\u00fck\u00e7e OgrenciIslemleri s\u0131n\u0131f\u0131n\u0131n da orant\u0131l\u0131 olarak b\u00fcy\u00fcyece\u011fi, dolay\u0131s\u0131yla XmlDosyaVeriDesposu s\u0131n\u0131f\u0131n\u0131n kullan\u0131m\u0131n\u0131n da artaca\u011f\u0131 beklenecektir. Bu durum da ilerleyen zamanlarda projenizin veri kayna\u011f\u0131n\u0131n xml\u2019den farkl\u0131 bir veri kayna\u011f\u0131na \u00e7evirmenin ne kadar zorlay\u0131c\u0131 bir i\u015f kalemi olaca\u011f\u0131n\u0131 tahmin edersiniz. \u00d6te yandan biz bunun yerine ayn\u0131 i\u015flemleri a\u015fa\u011f\u0131daki \u00f6rnekte oldu\u011fu \u015fekliyle ger\u00e7ekle\u015ftirelim;<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public interface IVeriDeposu {\n    long Kaydet(object veri);\n}\n\ninternal class OgrenciIslemleri {\n    private readonly IVeriDeposu veriDeposu;\n\n    public OgrenciIslemleri(IVeriDeposu veriDeposu) {\n        this.veriDeposu = veriDeposu;\n    }\n\n    public void OgrenciKaydet(Ogrenci ogrenci) {\n        try {\n            Console.WriteLine(\"\u00d6\u011frenci kayd\u0131 yap\u0131l\u0131yor...\");\n\n            var referansId = veriDeposu.Kaydet(ogrenci);\n\n            Console.WriteLine(\"\u00d6\u011frenci kayd\u0131 yap\u0131ld\u0131. Referans Id : \" + referansId);\n        }\n        catch (Exception istisna){\n            Console.Error.WriteLine(\"\u00d6\u011frenci kayd\u0131 s\u0131ras\u0131nda beklenmeyen bir hata olu\u015ftu : \" + istisna);\n        }\n    }\n}<\/pre>\n\n\n\n<p>&nbsp;&nbsp; \u00d6rne\u011fimizde; bir <em>Ogrenci<\/em> POCO s\u0131n\u0131f\u0131m\u0131z, bu s\u0131n\u0131f \u00fczerinde i\u015flem yapan <em>OgrenciIslemleri<\/em> s\u0131n\u0131f\u0131m\u0131z ve son olarak veriyi kaydedebildi\u011fimiz bir <em>IVeriDeposu<\/em> kontrat\u0131m\u0131z bulunmakta. Dikkat edecek olursan\u0131z ilk \u00f6rnekten farkl\u0131 olarak burada <em>OgrenciIslemleri<\/em> s\u0131n\u0131f\u0131 ne veri kayna\u011f\u0131n\u0131, ne de verinin bu veri kayna\u011f\u0131na nas\u0131l kay\u0131t edildi\u011fiyle ilgilenmemekte. Temel g\u00f6revlerini yaparak ilgili noktalarda log atarak i\u015flemini sonland\u0131rmakta. Bu kod par\u00e7ac\u0131\u011f\u0131 en basit haliyle d\u0131\u015far\u0131dan ba\u011f\u0131ml\u0131l\u0131\u011f\u0131n enjekte edilmesi \u00f6rnektir. Kod i\u00e7erisinde kullan\u0131m\u0131n\u0131 merak edenleriniz a\u015fa\u011f\u0131daki \u00f6rne\u011fi inleyebilirler;<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class Program {\n    static void Main(string[] args) {\n        var ogrenci = new Ogrenci {\n            No = 12345,\n            Adi = \"Fatih\",\n            Soyadi = \"Boy\",\n            Bolum = \"Bilgisayar M\u00fchendisli\u011fi\"\n        };\n\n        IVeriDeposu veriDeposu = new XmlDosyaVeriDesposu();\n        var ogrenciIslemleri = new OgrenciIslemleri(veriDeposu);\n\n        ogrenciIslemleri.OgrenciKaydet(ogrenci);\n    }\n}<\/pre>\n\n\n\n<p>&nbsp;&nbsp; Bu kod par\u00e7ac\u0131\u011f\u0131 ile birlikte \u00d6\u011frenci bilgileri bir xml dosyas\u0131na yaz\u0131labilmekte. Xml kayna\u011f\u0131n\u0131n nas\u0131l kullan\u0131ld\u0131\u011f\u0131n\u0131, performas\u0131n\u0131n nas\u0131l oldu\u011funu merak edenlere yaz\u0131m\u0131n ba\u015f\u0131nda payla\u015ft\u0131\u011f\u0131m hocam\u0131n s\u00f6z\u00fcn\u00fc hat\u0131rlatmak isterim \ud83d\ude09<\/p>\n\n\n\n<p>&nbsp;&nbsp; Ok, uygulaman\u0131z\u0131 geli\u015ftirdi\u011finiz ve veriniz gittik\u00e7e b\u00fcy\u00fcd\u00fc.. Performans problemleri ya\u015famaya ba\u015flad\u0131n\u0131z. Bu durumda do\u011fald\u0131r ki yapmak isteyece\u011finiz ilk i\u015flem veri kayna\u011f\u0131 olarak xml dosyas\u0131 yerine daha kabul g\u00f6rm\u00fc\u015f \u00e7\u00f6z\u00fcmlere gitmek.. Veritaban\u0131 gibi.. Bu durumda yukar\u0131daki kod i\u00e7erisinde tek de\u011fi\u015ftirmeniz gereken sat\u0131r veri deponuzu ilklendirdi\u011finiz yer olacakt\u0131r;<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class Program {\n    static void Main(string[] args) {\n        var ogrenci = new Ogrenci {\n            No = 12345,\n            Adi = \"Fatih\",\n            Soyadi = \"Boy\",\n            Bolum = \"Bilgisayar M\u00fchendisli\u011fi\"\n        };\n\n        IVeriDeposu veriDeposu = new VeriTabaniDesposu();\n        var ogrenciIslemleri = new OgrenciIslemleri(veriDeposu);\n\n        ogrenciIslemleri.OgrenciKaydet(ogrenci);\n    }\n}<\/pre>\n\n\n\n<p>&nbsp;&nbsp; Dikkat edecek olursan\u0131z as\u0131l i\u015f mant\u0131\u011f\u0131n\u0131z\u0131n yer ald\u0131\u011f\u0131 kodlar bu de\u011fi\u015fimden hi\u00e7bir \u015fekilde etkilenmemekte.<\/p>\n\n\n\n<p>&nbsp;&nbsp; \u00d6rne\u011fimizden devam edecek olursak; ilerleyen zamanlarda sql sorgular\u0131nda derleyici deste\u011fini de yan\u0131n\u0131za almak istedi\u011finiz ve Entity Framework kullanmaya karar verdiniz. Bu durumda sadece IVeriDeposu aray\u00fcz\u00fcn\u00fc uygulayan yeni bir s\u0131n\u0131f yaparak a\u015fa\u011f\u0131daki \u015fekilde kullanabilirsiniz;<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class Program {\n    static void Main(string[] args) {\n        var ogrenci = new Ogrenci {\n            No = 12345,\n            Adi = \"Fatih\",\n            Soyadi = \"Boy\",\n            Bolum = \"Bilgisayar M\u00fchendisli\u011fi\"\n        };\n\n        IVeriDeposu veriDeposu = new EntityFrameworkVeriDesposu();\n        var ogrenciIslemleri = new OgrenciIslemleri(veriDeposu);\n\n        ogrenciIslemleri.OgrenciKaydet(ogrenci);\n    }\n}<\/pre>\n\n\n\n<p>&nbsp;&nbsp; Bu \u00f6rnekler \u00e7o\u011falt\u0131labilir; ama san\u0131r\u0131m as\u0131l vermek istedi\u011fim mesaj\u0131 iletebildim. \u0130\u015f mant\u0131\u011f\u0131 kodlar\u0131 ile veri kayna\u011f\u0131 kodlar\u0131 aras\u0131ndaki ba\u011f\u0131 <em>IVeriDeposu<\/em> aray\u00fcz tan\u0131m\u0131 sayesinde gev\u015fek tutarak uygulamam\u0131 nas\u0131l esnek hale getirebildi\u011fimi g\u00f6rd\u00fcn\u00fcz.<\/p>\n\n\n\n<p>&nbsp;&nbsp; Bu kadar \u00f6rnek ard\u0131ndan, takip etti\u011fimiz bu y\u00f6nteme literat\u00fcrde <b>Ba\u011f\u0131ml\u0131l\u0131k Enjeksiyonu<\/b> (ya da daha bilinen ad\u0131 ile <b>Dependency Injection, DI<\/b>) ad\u0131 verilmekte. Hatta bir ad\u0131m ileri gidecek olursak yukar\u0131daki \u00f6rne\u011fimiz yap\u0131c\u0131\/ilklendirici \u00fczerinden enjeksiyon (<b>Constructer Injection<\/b>) i\u00e7in g\u00fczel bir \u00f6rnektir.<\/p>\n\n\n\n<p>&nbsp;&nbsp; Constructer Injection d\u0131\u015f\u0131nda <b>Setter Injection<\/b>\u2019da olduk\u00e7a s\u0131k kullan\u0131lan Dependency Injection y\u00f6ntemlerinden birisidir. Constructer Injection\u2019dan farkl\u0131 olarak, Setter Injection\u2019da ba\u011f\u0131ml\u0131l\u0131k yap\u0131c\u0131\/ilklendirici \u00fczerinden de\u011fil bir fonksiyon ya da \u00f6zellik (property) \u00fczerinden s\u0131n\u0131fa iletilmektedir. \u00d6rne\u011fin;<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">internal class OgrenciIslemleri {\n    public IVeriDeposu VeriDeposu { set; get; }\n\n    public void OgrenciKaydet(Ogrenci ogrenci) {\n        try {\n            Console.WriteLine(\"\u00d6\u011frenci kayd\u0131 yap\u0131l\u0131yor...\");\n\n            var referansId = VeriDeposu.Kaydet(ogrenci);\n\n            Console.WriteLine(\"\u00d6\u011frenci kayd\u0131 yap\u0131ld\u0131. Referans Id : \" + referansId);\n        }\n        catch (Exception istisna){\n            Console.Error.WriteLine(\"\u00d6\u011frenci kayd\u0131 s\u0131ras\u0131nda beklenmeyen bir hata olu\u015ftu : \" + istisna);\n        }\n    }\n}<\/pre>\n\n\n\n<p>&nbsp;&nbsp; \u0130ki y\u00f6netiminde kendilerine g\u00f6re art\u0131 ve eski yanlar\u0131 bulunmas\u0131 nedeniyle kullan\u0131m amac\u0131na g\u00f6re do\u011fru y\u00f6netim tercih edilmesi \u00f6nemlidir. <em>Constructer Injection<\/em> yakla\u015f\u0131m\u0131nda ba\u011f\u0131ml\u0131l\u0131k bir kere ve s\u0131n\u0131f olu\u015fturulurken enjekte edilmektedir. Dolay\u0131s\u0131yla s\u0131n\u0131f i\u00e7in ba\u011f\u0131ml\u0131l\u0131\u011f\u0131n sonradan de\u011fi\u015ftirilmesi s\u00f6z konusu olmayacakt\u0131r. Di\u011fer yandan <em>Setter Injection<\/em> yakla\u015f\u0131m\u0131nda ba\u011f\u0131ml\u0131l\u0131k istendi\u011fi zaman de\u011fi\u015ftirilebilir ki bu durum da \u00f6nemli bir hareket \u00f6zg\u00fcrl\u00fc\u011f\u00fc sunmaktad\u0131r. \u00d6te yandan Setter Injection y\u00f6nteminde ba\u011f\u0131ml\u0131l\u0131\u011f\u0131n kullan\u0131m \u00f6ncesinde ilklendirilmi\u015f oldu\u011funun bir garantisi bulunmamaktad\u0131r.<\/p>\n\n\n\n<p>&nbsp;&nbsp; Dependency Injection kavram\u0131 ile tan\u0131\u015fmam\u0131z ard\u0131ndan \u00f6rne\u011fimize geri d\u00f6nd\u00fc\u011f\u00fcm\u00fczde i\u015f mant\u0131\u011f\u0131 kodumuz i\u00e7erisinde loglama i\u015flemlerini ger\u00e7ekle\u015ftirdi\u011fimizi hat\u0131rlayal\u0131m. Madem ba\u011f\u0131ml\u0131l\u0131klar\u0131 tamamen s\u0131n\u0131f\u0131m\u0131z\u0131n d\u0131\u015f\u0131na ta\u015f\u0131yoruz, bu durumda loglama i\u015flemini de d\u0131\u015far\u0131dan enjekte etmek ileride i\u015fimize yarayacakt\u0131r;<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">internal class OgrenciIslemleri {\n    private readonly IVeriDeposu veriDeposu;\n\tprivate readonly IGunlukDeposu gunlukDeposu;\n\n\tpublic OgrenciIslemleri(IVeriDeposu veriDeposu, IGunlukDeposu gunlukDeposu) {\n\t\tthis.veriDeposu = veriDeposu;\n\t\tthis.gunlukDeposu = gunlukDeposu;\n\t}\n\n\tpublic void OgrenciKaydet(Ogrenci ogrenci) {\n\t\ttry {\n\t\t\tgunlukDeposu.Debug(\"\u00d6\u011frenci kayd\u0131 yap\u0131l\u0131yor...\");\n\n\t\t\tvar referansId = veriDeposu.Kaydet(ogrenci);\n\n\t\t\tgunlukDeposu.Debug(\"\u00d6\u011frenci kayd\u0131 yap\u0131ld\u0131. Referans Id : {0}\", referansId);\n\t\t}\n        catch (Exception istisna){\n\t\t\tgunlukDeposu.Error(\"\u00d6\u011frenci kayd\u0131 s\u0131ras\u0131nda beklenmeyen bir hata olu\u015ftu : {0}\", istisna);\n\t\t}\n\t}\n}<\/pre>","protected":false},"excerpt":{"rendered":"<p>&nbsp;&nbsp; E\u011fer sizinle de bir nesne y\u00f6nelimli programla oturumu yapt\u0131ysak mutlaka benden duymu\u015fsunuzdur; \u00dcniversite\u2019de okurken nesne y\u00f6nelimli programlama dersi hocam\u0131z\u0131n kula\u011f\u0131mda yer etmi\u015f bir s\u00f6z\u00fc vard\u0131; nesne y\u00f6nelimli mimarilerin temel bir prensibi vard\u0131r : \u201cSANANE\u201d. Bu prensip olabildi\u011fine basit; fakat bir o kadar da ba\u015far\u0131l\u0131 uygulamalar\u0131n \u00f6n\u00fcn\u00fc a\u00e7an bir yakla\u015f\u0131md\u0131r. Ayn\u0131, hayat\u0131n kendisi gibi\u2026 Araba&#8230;<\/p>\n<p><a class=\"read-more\" href=\"https:\/\/fatihboy.com\/en\/dependency-injection-uzerine\/\">Read More<\/a><\/p>","protected":false},"author":1,"featured_media":33481,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[77,28],"tags":[315],"class_list":["post-33480","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-csharp","category-turkce","tag-dependency-injection"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.7 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Dependency Injection \u00dczerine - Fatih Boy<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihboy.com\/en\/dependency-injection-uzerine\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Dependency Injection \u00dczerine - Fatih Boy\" \/>\n<meta property=\"og:description\" content=\"&nbsp;&nbsp; E\u011fer sizinle de bir nesne y\u00f6nelimli programla oturumu yapt\u0131ysak mutlaka benden duymu\u015fsunuzdur; \u00dcniversite\u2019de okurken nesne y\u00f6nelimli programlama dersi hocam\u0131z\u0131n kula\u011f\u0131mda yer etmi\u015f bir s\u00f6z\u00fc vard\u0131; nesne y\u00f6nelimli mimarilerin temel bir prensibi vard\u0131r : \u201cSANANE\u201d. Bu prensip olabildi\u011fine basit; fakat bir o kadar da ba\u015far\u0131l\u0131 uygulamalar\u0131n \u00f6n\u00fcn\u00fc a\u00e7an bir yakla\u015f\u0131md\u0131r. Ayn\u0131, hayat\u0131n kendisi gibi\u2026 Araba...Read More\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihboy.com\/en\/dependency-injection-uzerine\/\" \/>\n<meta property=\"og:site_name\" content=\"Fatih Boy\" \/>\n<meta property=\"article:published_time\" content=\"2014-07-16T15:35:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-06-17T17:22:35+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/fatihboy.com\/wp-content\/uploads\/2021\/06\/injection.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1800\" \/>\n\t<meta property=\"og:image:height\" content=\"1199\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Fatih Boy\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Boy\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihboy.com\/dependency-injection-uzerine\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihboy.com\/dependency-injection-uzerine\/\"},\"author\":{\"name\":\"Fatih Boy\",\"@id\":\"https:\/\/fatihboy.com\/#\/schema\/person\/6b06a41d42eed36eaa0780fbeb774158\"},\"headline\":\"Dependency Injection \u00dczerine\",\"datePublished\":\"2014-07-16T15:35:00+00:00\",\"dateModified\":\"2021-06-17T17:22:35+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihboy.com\/dependency-injection-uzerine\/\"},\"wordCount\":1088,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihboy.com\/#\/schema\/person\/6b06a41d42eed36eaa0780fbeb774158\"},\"image\":{\"@id\":\"https:\/\/fatihboy.com\/dependency-injection-uzerine\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/fatihboy.com\/wp-content\/uploads\/2021\/06\/injection.jpg\",\"keywords\":[\"Dependency Injection\"],\"articleSection\":[\"C#\",\"T\u00fcrk\u00e7e\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihboy.com\/dependency-injection-uzerine\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihboy.com\/dependency-injection-uzerine\/\",\"url\":\"https:\/\/fatihboy.com\/dependency-injection-uzerine\/\",\"name\":\"Dependency Injection \u00dczerine - Fatih Boy\",\"isPartOf\":{\"@id\":\"https:\/\/fatihboy.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/fatihboy.com\/dependency-injection-uzerine\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/fatihboy.com\/dependency-injection-uzerine\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/fatihboy.com\/wp-content\/uploads\/2021\/06\/injection.jpg\",\"datePublished\":\"2014-07-16T15:35:00+00:00\",\"dateModified\":\"2021-06-17T17:22:35+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihboy.com\/dependency-injection-uzerine\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihboy.com\/dependency-injection-uzerine\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/fatihboy.com\/dependency-injection-uzerine\/#primaryimage\",\"url\":\"https:\/\/fatihboy.com\/wp-content\/uploads\/2021\/06\/injection.jpg\",\"contentUrl\":\"https:\/\/fatihboy.com\/wp-content\/uploads\/2021\/06\/injection.jpg\",\"width\":1800,\"height\":1199},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihboy.com\/dependency-injection-uzerine\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/fatihboy.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Dependency Injection \u00dczerine\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihboy.com\/#website\",\"url\":\"https:\/\/fatihboy.com\/\",\"name\":\"Fatih Boy\",\"description\":\"Ki\u015fisel Web Sitesi\",\"publisher\":{\"@id\":\"https:\/\/fatihboy.com\/#\/schema\/person\/6b06a41d42eed36eaa0780fbeb774158\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihboy.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihboy.com\/#\/schema\/person\/6b06a41d42eed36eaa0780fbeb774158\",\"name\":\"Fatih Boy\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/fatihboy.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/5b3de123ad95a2ffe30b75a54cee98b55f65185c6d6805b35088a3d945f2feb4?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/5b3de123ad95a2ffe30b75a54cee98b55f65185c6d6805b35088a3d945f2feb4?s=96&d=mm&r=g\",\"caption\":\"Fatih Boy\"},\"logo\":{\"@id\":\"https:\/\/fatihboy.com\/#\/schema\/person\/image\/\"},\"sameAs\":[\"https:\/\/fatihboy.com\"],\"url\":\"https:\/\/fatihboy.com\/en\/author\/fatih\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Dependency Injection \u00dczerine - Fatih Boy","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihboy.com\/en\/dependency-injection-uzerine\/","og_locale":"en_US","og_type":"article","og_title":"Dependency Injection \u00dczerine - Fatih Boy","og_description":"&nbsp;&nbsp; E\u011fer sizinle de bir nesne y\u00f6nelimli programla oturumu yapt\u0131ysak mutlaka benden duymu\u015fsunuzdur; \u00dcniversite\u2019de okurken nesne y\u00f6nelimli programlama dersi hocam\u0131z\u0131n kula\u011f\u0131mda yer etmi\u015f bir s\u00f6z\u00fc vard\u0131; nesne y\u00f6nelimli mimarilerin temel bir prensibi vard\u0131r : \u201cSANANE\u201d. Bu prensip olabildi\u011fine basit; fakat bir o kadar da ba\u015far\u0131l\u0131 uygulamalar\u0131n \u00f6n\u00fcn\u00fc a\u00e7an bir yakla\u015f\u0131md\u0131r. Ayn\u0131, hayat\u0131n kendisi gibi\u2026 Araba...Read More","og_url":"https:\/\/fatihboy.com\/en\/dependency-injection-uzerine\/","og_site_name":"Fatih Boy","article_published_time":"2014-07-16T15:35:00+00:00","article_modified_time":"2021-06-17T17:22:35+00:00","og_image":[{"width":1800,"height":1199,"url":"https:\/\/fatihboy.com\/wp-content\/uploads\/2021\/06\/injection.jpg","type":"image\/jpeg"}],"author":"Fatih Boy","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Fatih Boy","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihboy.com\/dependency-injection-uzerine\/#article","isPartOf":{"@id":"https:\/\/fatihboy.com\/dependency-injection-uzerine\/"},"author":{"name":"Fatih Boy","@id":"https:\/\/fatihboy.com\/#\/schema\/person\/6b06a41d42eed36eaa0780fbeb774158"},"headline":"Dependency Injection \u00dczerine","datePublished":"2014-07-16T15:35:00+00:00","dateModified":"2021-06-17T17:22:35+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihboy.com\/dependency-injection-uzerine\/"},"wordCount":1088,"commentCount":0,"publisher":{"@id":"https:\/\/fatihboy.com\/#\/schema\/person\/6b06a41d42eed36eaa0780fbeb774158"},"image":{"@id":"https:\/\/fatihboy.com\/dependency-injection-uzerine\/#primaryimage"},"thumbnailUrl":"https:\/\/fatihboy.com\/wp-content\/uploads\/2021\/06\/injection.jpg","keywords":["Dependency Injection"],"articleSection":["C#","T\u00fcrk\u00e7e"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihboy.com\/dependency-injection-uzerine\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/fatihboy.com\/dependency-injection-uzerine\/","url":"https:\/\/fatihboy.com\/dependency-injection-uzerine\/","name":"Dependency Injection \u00dczerine - Fatih Boy","isPartOf":{"@id":"https:\/\/fatihboy.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/fatihboy.com\/dependency-injection-uzerine\/#primaryimage"},"image":{"@id":"https:\/\/fatihboy.com\/dependency-injection-uzerine\/#primaryimage"},"thumbnailUrl":"https:\/\/fatihboy.com\/wp-content\/uploads\/2021\/06\/injection.jpg","datePublished":"2014-07-16T15:35:00+00:00","dateModified":"2021-06-17T17:22:35+00:00","breadcrumb":{"@id":"https:\/\/fatihboy.com\/dependency-injection-uzerine\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihboy.com\/dependency-injection-uzerine\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/fatihboy.com\/dependency-injection-uzerine\/#primaryimage","url":"https:\/\/fatihboy.com\/wp-content\/uploads\/2021\/06\/injection.jpg","contentUrl":"https:\/\/fatihboy.com\/wp-content\/uploads\/2021\/06\/injection.jpg","width":1800,"height":1199},{"@type":"BreadcrumbList","@id":"https:\/\/fatihboy.com\/dependency-injection-uzerine\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/fatihboy.com\/"},{"@type":"ListItem","position":2,"name":"Dependency Injection \u00dczerine"}]},{"@type":"WebSite","@id":"https:\/\/fatihboy.com\/#website","url":"https:\/\/fatihboy.com\/","name":"Fatih Boy","description":"Ki\u015fisel Web Sitesi","publisher":{"@id":"https:\/\/fatihboy.com\/#\/schema\/person\/6b06a41d42eed36eaa0780fbeb774158"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihboy.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihboy.com\/#\/schema\/person\/6b06a41d42eed36eaa0780fbeb774158","name":"Fatih Boy","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/fatihboy.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/5b3de123ad95a2ffe30b75a54cee98b55f65185c6d6805b35088a3d945f2feb4?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/5b3de123ad95a2ffe30b75a54cee98b55f65185c6d6805b35088a3d945f2feb4?s=96&d=mm&r=g","caption":"Fatih Boy"},"logo":{"@id":"https:\/\/fatihboy.com\/#\/schema\/person\/image\/"},"sameAs":["https:\/\/fatihboy.com"],"url":"https:\/\/fatihboy.com\/en\/author\/fatih\/"}]}},"brizy_media":[],"_links":{"self":[{"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/posts\/33480","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/comments?post=33480"}],"version-history":[{"count":1,"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/posts\/33480\/revisions"}],"predecessor-version":[{"id":33482,"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/posts\/33480\/revisions\/33482"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/media\/33481"}],"wp:attachment":[{"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/media?parent=33480"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/categories?post=33480"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/tags?post=33480"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}