{"id":33461,"date":"2014-08-04T18:15:00","date_gmt":"2014-08-04T15:15:00","guid":{"rendered":"https:\/\/fatihboy.com\/?p=33461"},"modified":"2021-06-17T10:34:38","modified_gmt":"2021-06-17T07:34:38","slug":"ninject-baglama-gore-sekillenen-tur-baglamalari","status":"publish","type":"post","link":"https:\/\/fatihboy.com\/en\/ninject-baglama-gore-sekillenen-tur-baglamalari\/","title":{"rendered":"Ninject \u2013 Ba\u011flama g\u00f6re \u015eekillenen T\u00fcr Ba\u011flamalar\u0131"},"content":{"rendered":"<p>&nbsp;&nbsp; Ninject konusunda h\u0131zla ilerlerken bir \u00f6nceki makalemizde ileri d\u00fczey konulara da giri\u015f yapm\u0131\u015ft\u0131k. Geldi\u011fimiz noktada art\u0131k t\u00fcr ba\u011flamalar\u0131n\u0131 da otomatize edebildik. Bu makalemde ise Ninject\u2019in bir ba\u015fka y\u00f6n\u00fcne, g\u00fc\u00e7l\u00fc oldu\u011fu bir y\u00f6ne g\u00f6z ataca\u011f\u0131z; <em>T\u00fcrlerin i\u00e7inde bulunduklar\u0131 ba\u011flama g\u00f6re ili\u015fkilendirilmesi<\/em>. Dikkat edecek olursan\u0131z \u015fimdiye kadar geldi\u011fimiz noktada t\u00fcrlerin ba\u011flanmas\u0131 tamamen statikti. \u00d6rne\u011fin; <em>IGunlukDeposu<\/em> uygulaman\u0131n her yerinde, kim talep ederse etsin hep <em>TextGunlukDeposu<\/em> t\u00fcr\u00fc verilmekte. Ayn\u0131 1 ya da 0 gibi\u2026 Oysa ger\u00e7ek hayatta durum bundan biraz farkl\u0131d\u0131r, g\u00fcnl\u00fcklerin pek \u00e7ok yerde text dosyas\u0131na yaz\u0131lmas\u0131 beklenirken kritik i\u015flemlerin yap\u0131ld\u0131\u011f\u0131\/exception\u2019lar\u0131n anlaml\u0131 mesajlar d\u00f6n\u00fc\u015ft\u00fcr\u00fcld\u00fc\u011f\u00fc s\u0131n\u0131flarda SMS ya da mail tercih edilebilir. Kimi durumlarda <u>geli\u015ftirici<\/u> varsay\u0131lan t\u00fcr ba\u011flamas\u0131ndan farkl\u0131 olarak, \u00f6rne\u011fin \u201c<em>kritik<\/em>\u201d loglama y\u00f6ntemlerini talep edebilir. Bu noktada geli\u015ftiricinin sadece \u201c<em>kritik<\/em>\u201d bir ba\u011flama girildi\u011finin belirtilmesi yeterli olmal\u0131d\u0131r. Bir ba\u015fka senaryoda ise bu karar geli\u015ftiriciden ziyade t\u00fcr ba\u011flamas\u0131n\u0131n yap\u0131ld\u0131\u011f\u0131 mod\u00fclde verilmesi istenebilir.<\/p>\n\n\n\n<p>&nbsp;&nbsp; Yukar\u0131da s\u0131ralad\u0131\u011f\u0131m senaryolar asl\u0131nda bir t\u00fcr i\u00e7in birden fazla ba\u011flama yap\u0131lmas\u0131 anlam\u0131na geliyor. Dolay\u0131s\u0131yla Ninject\u2019e bir \u015fekilde hangi ba\u011flaman\u0131n ne zaman kullan\u0131laca\u011f\u0131na dair bilgi vermemiz gerekiyor. \u015eimdi gelin, farkl\u0131 senaryolar i\u00e7in farkl\u0131 y\u00f6ntemlerin takip edilece\u011fi bu \u201c<em>ipucu<\/em>\u201d verme i\u015flemlerini basitten kar\u0131\u015f\u0131\u011fa inceleyelim.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u0130simlendirilmi\u015f Ba\u011flamalar<\/h3>\n\n\n\n<p>&nbsp;&nbsp; Ad\u0131ndan da tahmin edebilece\u011finiz gibi bu yakla\u015f\u0131mda standart t\u00fcr ba\u011flamas\u0131 yap\u0131l\u0131rken, yap\u0131lan i\u015fleme daha sonradan i\u015faret edebilmek ad\u0131na bir takma ad\/alias\/isim verilmekte. \u0130simlendirme i\u015flemi i\u00e7in standart ba\u011flama y\u00f6ntemi ard\u0131ndan <b>Named<\/b> fonksiyonunun istenilen isim parametresi ile birlikte a\u015fa\u011f\u0131daki \u015fekilde \u00e7a\u011f\u0131r\u0131lmas\u0131 yeterli 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=\"\">public class AnaModul : NinjectModule {\n    public override void Load() {\n        Bind&lt;IVeriDeposu>().To&lt;XmlDosyaVeriDesposu>();\n\n        Bind&lt;IGunlukDeposu>().To&lt;TextGunlukDeposu>().Named(\"Standart\");\n        Bind&lt;IGunlukDeposu>().To&lt;MailGunlukDeposu>().Named(\"Kritik\");\n    }\n}<\/pre>\n\n\n\n<p>&nbsp;&nbsp; \u00d6rne\u011fimizde <b>IGunlukDeposu<\/b> i\u00e7in <em>Standart<\/em> ve <em>Kritik<\/em> isimleri ile iki farkl\u0131 ba\u011flama yap\u0131lmakta. Devam\u0131nda geli\u015ftirici olarak kod i\u00e7erisinde hangi isme dair ba\u011flama yap\u0131ld\u0131\u011f\u0131n\u0131 belirtmek istersek <b>NamedAttribute<\/b>\u2019\u00fcn\u00fc kullanmam\u0131z yeterli 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=\"\">internal class OgrenciIslemleri {\n    public readonly IVeriDeposu veriDeposu;\n    private readonly IGunlukDeposu gunlukDeposu;\n\n    public OgrenciIslemleri(IVeriDeposu veriDeposu, [Named(\"Kritik\")] IGunlukDeposu gunlukDeposu) {\n        this.veriDeposu = veriDeposu;\n        this.gunlukDeposu = gunlukDeposu;\n    }\n\n    \/\/\u2026..\n}<\/pre>\n\n\n\n<p>&nbsp;&nbsp; \u00d6rne\u011fimizde geli\u015ftirici olarak <em>OgrenciIslemleri<\/em> s\u0131n\u0131f\u0131nda kritik i\u015flemler yapt\u0131\u011f\u0131m\u0131z\u0131 kabul ederek burada \u201c<em>kritik<\/em>\u201d g\u00fcnl\u00fck deposunun verilmesini talep etmekteyiz. Ayn\u0131 \u00f6rnek i\u00e7in standart g\u00fcnl\u00fck deposu ise \u015fu \u015fekilde talep edilecektir;<\/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 readonly IVeriDeposu veriDeposu;\n    private readonly IGunlukDeposu gunlukDeposu;\n\n    public OgrenciIslemleri(IVeriDeposu veriDeposu, [Named(\"Standart\")] IGunlukDeposu gunlukDeposu) {\n        this.veriDeposu = veriDeposu;\n        this.gunlukDeposu = gunlukDeposu;\n    }\n\n    \/\/\u2026\n}<\/pre>\n\n\n\n<p>&nbsp;&nbsp; Alternatif olarak a\u015fa\u011f\u0131daki \u015fekilde kritik g\u00fcnl\u00fck deposunu talep etmemiz de m\u00fcmk\u00fcn;<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">var kritikGunlukDeposu = kernel.Get&lt;IGunlukDeposu>(\"Kritik\");<\/pre>\n\n\n\n<p><b>P\u00fcf Noktas\u0131:<\/b> Bu noktada durup \u00f6nemli bir yerin alt\u0131n\u0131 \u00e7izmem gerekiyor. T\u00fcr ba\u011flamalar\u0131m\u0131z\u0131 isimlendirmemiz ard\u0131ndan bu ba\u011flamalar i\u00e7in varsay\u0131lan t\u00fcr atanmamaktad\u0131r. Konuyu netle\u015ftirme i\u00e7in a\u015fa\u011f\u0131daki kodu 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=\"\">public class AnaModul : NinjectModule {\n    public override void Load() {\n        Bind&lt;IVeriDeposu>().To&lt;XmlDosyaVeriDesposu>();\n\n        Bind&lt;IGunlukDeposu>().To&lt;TextGunlukDeposu>();\n        Bind&lt;IGunlukDeposu>().To&lt;MailGunlukDeposu>().Named(\"Kritik\");\n    }\n}<\/pre>\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 readonly IVeriDeposu veriDeposu;\n    private readonly IGunlukDeposu gunlukDeposu;\n\n    public OgrenciIslemleri(IVeriDeposu veriDeposu, IGunlukDeposu gunlukDeposu) {\n        this.veriDeposu = veriDeposu;\n        this.gunlukDeposu = gunlukDeposu;\n    }\n\n    \/\/\u2026\n}<\/pre>\n\n\n\n<p>&nbsp;&nbsp; Buradaki varsay\u0131m\u0131m\u0131z, aksi belirtilmez ise Ninject\u2019in <em>IGunlukDeposu<\/em> taleplerinde <em>TextGunlukDeposu<\/em> t\u00fcr\u00fcn\u00fc d\u00f6nece\u011fi ve <em>OgrenciIslemleri<\/em> s\u0131n\u0131f\u0131 i\u00e7in elimizde <em>TextGunlukDeposu<\/em> g\u00fcnl\u00fck deposunun olaca\u011f\u0131d\u0131r. \u00d6te yandan, uygulamay\u0131 \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131m\u0131zda a\u015fa\u011f\u0131daki hatay\u0131 alaca\u011f\u0131z;<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/fatihboy.com\/wp-content\/uploads\/2014\/08\/Named-binding-hatas.png\"><img decoding=\"async\" src=\"https:\/\/fatihboy.com\/wp-content\/uploads\/2014\/08\/Named-binding-hatas_thumb.png\" alt=\"Al\u0131nan ActivationException hatas\u0131na dair dialog\"\/><\/a><\/figure>\n\n\n\n<blockquote><pre>An unhandled exception of type 'Ninject.ActivationException' occurred in Ninject.dll\n     Additional information: Error activating IGunlukDeposu\n     More than one matching bindings are available.\n\t \n     Matching bindings:\n     1) binding from IGunlukDeposu to TextGunlukDeposu\n     2) binding from IGunlukDeposu to MailGunlukDeposu\n\t \n     Activation path:\n     2) Injection of dependency IGunlukDeposu into parameter gunlukDeposu of constructor of type OgrenciIslemleri\n     1) Request for OgrenciIslemleri\n\t \n     Suggestions:\n     1) Ensure that you have defined a binding for IGunlukDeposu only once.<\/pre><\/blockquote>\n\n\n\n<p>&nbsp;&nbsp; Hata mesaj\u0131nda, talep edilen <em>IGunlukDeposu<\/em> i\u00e7in <em>TextGunlukDeposu<\/em> ve <em>MailGunlukDeposu<\/em> t\u00fcr ba\u011flamalar\u0131n\u0131n tan\u0131ml\u0131 oldu\u011fu belirtilerek hangisinin kullan\u0131laca\u011f\u0131na karar verilemedi\u011fi s\u00f6ylenmekte. Bu durumunda <em>IGunlukDeposu<\/em> i\u00e7in olan t\u00fcr ba\u011flamalar\u0131n\u0131n hepsini ilk \u00f6rne\u011fimizdeki \u015fekilde isimlendirmeliyiz; fakat bu durumda da t\u00fcm kodu g\u00f6zden ge\u00e7irerek kullan\u0131ld\u0131\u011f\u0131 her yerde <b>NamedAttribute<\/b>\u2019\u00fcn\u00fc kullanmam\u0131z gerekecektir. K\u00fc\u00e7\u00fck uygulamalarda bu durum bir s\u0131k\u0131nt\u0131 olmasada b\u00fcy\u00fck \u00f6l\u00e7ekli uygulamalarda ba\u015f a\u011fr\u0131s\u0131 yarataca\u011f\u0131 kesin\u2026<\/p>\n\n\n\n<p>&nbsp;&nbsp; \u015eansl\u0131y\u0131z ki yine Ninject i\u00e7erisinde bu durum i\u00e7in bir \u00e7\u00f6z\u00fcm bulunuyor. Asl\u0131nda yap\u0131lmas\u0131 gereken varsay\u0131lan olmas\u0131n\u0131 istedi\u011fimiz ba\u011flama i\u00e7in bir ko\u015ful olu\u015fturma. \u0130lgili t\u00fcr ba\u011flamas\u0131nda isimlendirmeye dair bir ko\u015ful olmamas\u0131 durumunda bu t\u00fcr ba\u011flamas\u0131 kullan\u0131lmal\u0131d\u0131r demeliyiz. Bunun i\u00e7in a\u015fa\u011f\u0131daki \u015fekilde <b>When<\/b> fonksiyonunu kullanabiliriz;<\/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=\"\">Bind&lt;IGunlukDeposu>().To&lt;TextGunlukDeposu>().When(talepDetayi => talepDetayi.ParentContext != null &amp;&amp; !talepDetayi.ParentContext.Binding.IsConditional);<\/pre>\n\n\n\n<p>&nbsp;&nbsp; \u00d6rne\u011fimizde Ninject\u2019e <em>IGunlukDeposu<\/em> t\u00fcr\u00fc \u00f6rne\u011fi talep edildi\u011finde i\u00e7inde bulundu\u011fu ba\u011flam i\u00e7in bir ko\u015ful yoksa <em>TextGunlukDeposu<\/em> t\u00fcr\u00fcn\u00fc ver diyoruz. Bu durumda kodumuzun son hali \u015fu \u015fekilde 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=\"\">public class AnaModul : NinjectModule {\n    public override void Load() {\n        Bind&lt;IVeriDeposu>().To&lt;XmlDosyaVeriDesposu>();\n\n        Bind&lt;IGunlukDeposu>().To&lt;TextGunlukDeposu>().When(talepDetayi => talepDetayi.ParentContext != null &amp;&amp; !talepDetayi.ParentContext.Binding.IsConditional);\n        Bind&lt;IGunlukDeposu>().To&lt;MailGunlukDeposu>().Named(\"Kritik\");\n    }\n}<\/pre>\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 readonly IVeriDeposu veriDeposu;\n    private readonly IGunlukDeposu gunlukDeposu;\n\n    public OgrenciIslemleri(IVeriDeposu veriDeposu, IGunlukDeposu gunlukDeposu) {\n        this.veriDeposu = veriDeposu;\n        this.gunlukDeposu = gunlukDeposu;\n    }\n\n    \/\/\u2026\n}<\/pre>\n\n\n\n<p><b>Pro Tip: <\/b>Mod\u00fclleriniz i\u00e7erisinde isimlendirilmi\u015f ba\u011flamalar\u0131 \u00e7ok kullan\u0131yor ve yukar\u0131daki gibi varsay\u0131lan ba\u011flama tan\u0131m\u0131 yap\u0131yorsan\u0131z size tavsiye \u00f6ncelikle varsay\u0131lan ko\u015fulu i\u00e7in a\u015fa\u011f\u0131daki \u015fekilde bir delegate olu\u015fturman\u0131z;<\/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=\"\">Func&lt;IRequest, bool> kosulYoksa = talepDetayi => talepDetayi.ParentContext != null &amp;&amp; !talepDetayi.ParentContext.Binding.IsConditional;<\/pre>\n\n\n\n<p>&nbsp;&nbsp; Devam\u0131nda <b>When<\/b> fonksiyonlar\u0131na <b>kosulYoksa<\/b> delegate\u2019ini ge\u00e7ebilirsiniz;<\/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 class AnaModul : NinjectModule {\n    private readonly Func&lt;IRequest, bool> kosulYoksa = talepDetayi => talepDetayi.ParentContext != null &amp;&amp; !talepDetayi.ParentContext.Binding.IsConditional;\n\n    public override void Load() {\n        Bind&lt;IVeriDeposu>().To&lt;XmlDosyaVeriDesposu>();\n\n        Bind&lt;IGunlukDeposu>().To&lt;TextGunlukDeposu>().When(kosulYoksa);\n        Bind&lt;IGunlukDeposu>().To&lt;MailGunlukDeposu>().Named(\"Kritik\");\n    }\n}<\/pre>\n\n\n\n<p>&nbsp;&nbsp; Bu \u015fekilde kodunuz daha okunakl\u0131, anla\u015f\u0131l\u0131r olacakt\u0131r.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">K\u0131s\u0131tlama ile T\u00fcr \u00e7\u00f6z\u00fcm\u00fc;<\/h3>\n\n\n\n<p>&nbsp;&nbsp; Ba\u011flama g\u00f6re t\u00fcr ba\u011flamas\u0131 yapmak i\u00e7in Ninject\u2019in bize sundu\u011fu tek y\u00f6ntem isimlendirilmi\u015f ba\u011flamalar de\u011fildir. Kullanabilece\u011finiz bir di\u011fer y\u00f6ntem ise \u00f6zniteliklerle t\u00fcr ba\u011flamalar\u0131n\u0131 k\u0131s\u0131tlamakt\u0131r. Bu y\u00f6ntem i\u00e7in yapman\u0131z gereken <b>ConstraintAttribute<\/b>\u2019ten t\u00fcretece\u011finiz bir \u00f6znitelik i\u00e7erisin k\u0131s\u0131t\u0131n\u0131z\u0131 tan\u0131mlayarak ilgili ba\u011flama noktas\u0131nda kullanmak olmal\u0131d\u0131r. Soyut bir s\u0131n\u0131f olarak <em>ConstraintAttribute<\/em> s\u0131n\u0131f\u0131 Ninject taraf\u0131ndan \u00f6zel olarak tan\u0131nan bir \u00f6zniteliktir ve ba\u011flama hakk\u0131nda \u00f6nceden tan\u0131mlanm\u0131\u015f olan meta veriler \u00fczerinden i\u015flem yapabilmenizi sa\u011flamaktad\u0131r.<\/p>\n\n\n\n<p>&nbsp;&nbsp; Konunun netle\u015fmesi ad\u0131na yukar\u0131daki \u00f6rne\u011fimizi bu defa k\u0131s\u0131tlama ile t\u00fcr \u00e7\u00f6z\u00fcm\u00fc ile ger\u00e7ekle\u015ftirelim. Bunun i\u00e7in <em>ConstraintAttribute<\/em>\u2019ten t\u00fcreyecek \u015fekilde <b>KritikAttribute<\/b> ad\u0131yla yeni bir \u00f6znitelik olu\u015ftural\u0131m;<\/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=\"\">[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter, AllowMultiple = false, Inherited = true)]\npublic class KritikAttribute : ConstraintAttribute {\n    public override bool Matches(IBindingMetadata metadata) {\n        return metadata.Has(\"Kritik\") &amp;&amp; metadata.Get&lt;bool>(\"Kritik\");\n    }\n}<\/pre>\n\n\n\n<p>&nbsp;&nbsp; \u0130kinci ad\u0131mda <em>MailGunlukDeposu<\/em> i\u00e7in yapt\u0131\u011f\u0131m\u0131z t\u00fcr ba\u011flamas\u0131n\u0131 meta veri ge\u00e7ecek \u015fekilde g\u00fcncelleyelim;<\/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=\"\">Bind&lt;IGunlukDeposu>().To&lt;MailGunlukDeposu>().WithMetadata(\"Kritik\", true);<\/pre>\n\n\n\n<p>&nbsp;&nbsp; Son olarak da, isimlendirilmi\u015f ba\u011flamaya benzer \u015fekilde Kritik t\u00fcr ba\u011flamas\u0131n\u0131n yap\u0131lmas\u0131n\u0131 istedi\u011fimiz noktada Kritik \u00f6zniteli\u011fini kullanal\u0131m;<\/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 readonly IVeriDeposu veriDeposu;\n    private readonly IGunlukDeposu gunlukDeposu;\n\n    public OgrenciIslemleri(IVeriDeposu veriDeposu, [Kritik]IGunlukDeposu gunlukDeposu) {\n        this.veriDeposu = veriDeposu;\n        this.gunlukDeposu = gunlukDeposu;\n    }\n\n    \/\/\u2026\n}<\/pre>\n\n\n\n<p>&nbsp;&nbsp; Bu bilgiler ard\u0131ndan, isimlendirilmi\u015f ba\u011flaya bir defa daha g\u00f6z atacak olursak asl\u0131nda \u00f6znitelik \u00fczerinden k\u0131s\u0131tlama ile t\u00fcr \u00e7\u00f6z\u00fcm\u00fcnden pek de farkl\u0131 olmad\u0131\u011f\u0131n\u0131 g\u00f6rebiliriz. Hatta, NamedAttribute s\u0131n\u0131f\u0131 incelendi\u011finde ayn\u0131 y\u00f6ntemi kulland\u0131\u011f\u0131n\u0131 fark edeceksinizdir;<\/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=\"\">\/\/\/ &lt;summary>\n\/\/\/ Indicates that the decorated member should only be injected using binding(s) registered\n\/\/\/ with the specified name.\n\/\/\/ &lt;\/summary>\npublic class NamedAttribute : ConstraintAttribute {\n    \/\/\/ &lt;summary>\n    \/\/\/ Gets the binding name.\n    \/\/\/ &lt;\/summary>\n    public string Name { get; private set; }\n\n    \/\/\/ &lt;summary>\n    \/\/\/ Initializes a new instance of the &lt;see cref=\"NamedAttribute\"\/> class.\n    \/\/\/ &lt;\/summary>\n    \/\/\/ &lt;param name=\"name\">The name of the binding(s) to use.&lt;\/param>\n    public NamedAttribute(string name) {\n        Ensure.ArgumentNotNullOrEmpty(name, \"name\");\n        Name = name;\n    }\n\n    \/\/\/ &lt;summary>\n    \/\/\/ Determines whether the specified binding metadata matches the constraint.\n    \/\/\/ &lt;\/summary>\n    \/\/\/ &lt;param name=\"metadata\">The metadata in question.&lt;\/param>\n    \/\/\/ &lt;returns>&lt;c>True&lt;\/c> if the metadata matches; otherwise &lt;c>false&lt;\/c>.&lt;\/returns>\n    public override bool Matches(IBindingMetadata metadata) {\n        Ensure.ArgumentNotNull(metadata, \"metadata\");\n        return metadata.Name == Name;\n    }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Ba\u011flama Zaman\u0131 K\u0131s\u0131tlama;<\/h3>\n\n\n\n<p>&nbsp;&nbsp; \u015eimdiye kadar inceledi\u011fimiz iki y\u00f6ntemin de en \u00f6nemli ortak yan\u0131 geli\u015ftiricinin ba\u011flama karar vermesiydi. Kodun belirli yerlerine \u00f6znitelikler vas\u0131tas\u0131yla konulan i\u015faretler Ninject taraf\u0131ndan okunarak ba\u011flam belirleniyordu. Bu y\u00f6ntem, statik t\u00fcr ba\u011flamas\u0131na g\u00f6re esnek olmakla birlikte yine de uygulaman\u0131n ana koduna ba\u011f\u0131ml\u0131l\u0131\u011f\u0131m\u0131z bulunuyor. Herhangi bir mod\u00fclde tam anlam\u0131yla ba\u011flam\u0131 de\u011fi\u015ftirebilmek yerine ana uygulama geli\u015ftiricinin belirledi\u011fi s\u0131n\u0131rlar i\u00e7erisinde kal\u0131yoruz. \u00d6te yandan Ninject\u2019in bize sundu\u011fu bir di\u011fer y\u00f6ntem var ki; bu y\u00f6ntemle tam olarak esnekli\u011fe sahip olabiliyoruz: Ba\u011flama zaman\u0131 k\u0131s\u0131tlamalar.<\/p>\n\n\n\n<p>&nbsp;&nbsp; Bu y\u00f6ntemde t\u00fcr ba\u011flamalar\u0131 mod\u00fcller i\u00e7erisinde belirtilebiliyor;<\/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=\"\">Bind&lt;IGunlukDeposu>().To&lt;MailGunlukDeposu>().WhenInjectedExactlyInto&lt;OgrenciIslemleri>();<\/pre>\n\n\n\n<p>Ya da<\/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=\"\">Bind&lt;IGunlukDeposu>().To&lt;MailGunlukDeposu>().WhenInjectedExactlyInto(typeof(OgrenciIslemleri));<\/pre>\n\n\n\n<p>&nbsp;&nbsp; \u00d6rne\u011fimizde <em>OgrenciIslemleri<\/em> s\u0131n\u0131f\u0131na <em>IGunlukDeposu<\/em> aray\u00fcz\u00fc enjekte edilirken <em>MailGunlukDeposu<\/em> s\u0131n\u0131f\u0131n\u0131n kullan\u0131lmas\u0131 gerekti\u011fi harici olarak belirtiliyor. Burada yap\u0131lan t\u00fcr ba\u011flamas\u0131 uygulaman\u0131n ana kodundan tamamen d\u0131\u015far\u0131da, mod\u00fcl i\u00e7erisinde oldu\u011fu i\u00e7in farkl\u0131 bir mod\u00fcl tan\u0131m\u0131nda uygulaman\u0131n tamamen farkl\u0131 davran\u0131\u015f sergilemesi rahatl\u0131kla sa\u011flanabilecektir. Bu da do\u011fal olarak uygulamaya \u00fcst d\u00fczeyde bir esneklik sa\u011flayacakt\u0131r.<\/p>\n\n\n\n<p>&nbsp;&nbsp; Ba\u011flama zaman\u0131 k\u0131s\u0131t ekleme y\u00f6nteminin bize sa\u011flad\u0131\u011f\u0131 esneklikle bununla da s\u0131n\u0131rl\u0131 de\u011fildir. \u00d6nceki y\u00f6ntemlerde bahsetti\u011fim \u00f6znitelik tabanl\u0131 k\u0131s\u0131t eklemeyi bu y\u00f6ntemde de yapabilmeniz, hem de \u00e7ok daha basit \u015fekliyle yapabilmeniz m\u00fcmk\u00fcn;<\/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 class KritikAttribute : Attribute { }<\/pre>\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 class OgrenciIslemleri {\n    public readonly IVeriDeposu veriDeposu;\n    private readonly IGunlukDeposu gunlukDeposu;\n\n    public OgrenciIslemleri(IVeriDeposu veriDeposu, [Kritik] GunlukDeposu gunlukDeposu) {\n        this.veriDeposu = veriDeposu;\n        this.gunlukDeposu = gunlukDeposu;\n    }\n\n    \/\/\u2026\n}<\/pre>\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 class AnaModul : NinjectModule {\n    public override void Load() {\n        Bind&lt;IVeriDeposu>().To&lt;XmlDosyaVeriDesposu>();\n\n        Bind&lt;IGunlukDeposu>().To&lt;TextGunlukDeposu>();\n        Bind&lt;IGunlukDeposu>().To&lt;MailGunlukDeposu>().WhenTargetHas&lt;KritikAttribute>();\n    }\n}<\/pre>\n\n\n\n<p>&nbsp;&nbsp; Bu haliyle \u00f6rne\u011fimizde bo\u015f bir <b>Kritik<\/b> \u00f6zniteli\u011fi olu\u015fturup <em>OgrenciIslemleri<\/em> s\u0131n\u0131f\u0131 constructer parametremizi kritik olarak i\u015faretliyoruz. Devam\u0131nda mod\u00fcl\u00fcm\u00fczde s\u0131n\u0131f kritik i\u015faretlenmi\u015fse (<em>kritik \u00f6zniteli\u011fine sahipse<\/em>) <em>IGunlukDeposu<\/em> t\u00fcr\u00fcn\u00fc <em>MailGunlukDeposu<\/em> t\u00fcr\u00fcne ba\u011fla diyoruz. Bu sayede i\u015faretleme ana uygulama kodunda ve derleme zaman\u0131nda yap\u0131lm\u0131\u015f olsa da ba\u011flanacak t\u00fcr\u00fcn karar\u0131 uygulama d\u0131\u015f\u0131nda, mod\u00fcl\u00fcm\u00fczde al\u0131n\u0131yor. A\u015fa\u011f\u0131da alternatif bir yakla\u015f\u0131mla parametre baz\u0131nda de\u011fil, <b>WhenClassHas<\/b> fonksiyonu yard\u0131m\u0131yla s\u0131n\u0131f baz\u0131nda bir i\u015faretleme s\u00f6z konusu;<\/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=\"\">[Kritik]\npublic class OgrenciIslemleri {\n    public readonly IVeriDeposu veriDeposu;\n    private readonly IGunlukDeposu gunlukDeposu;\n\n    public OgrenciIslemleri(IVeriDeposu veriDeposu, IGunlukDeposu gunlukDeposu) {\n        this.veriDeposu = veriDeposu;\n        this.gunlukDeposu = gunlukDeposu;\n    }\n\n    \/\/\u2026\n}<\/pre>\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 class AnaModul : NinjectModule {\n    public override void Load() {\n        Bind&lt;IVeriDeposu>().To&lt;XmlDosyaVeriDesposu>();\n\n        Bind&lt;IGunlukDeposu>().To&lt;TextGunlukDeposu>();\n        Bind&lt;IGunlukDeposu>().To&lt;MailGunlukDeposu>().WhenClassHas&lt;KritikAttribute>();\n    }\n}<\/pre>\n\n\n\n<p>&nbsp;&nbsp; Bu fonksiyonlar yan\u0131nda, daha \u00f6nceki makalelerde de yer yer kulland\u0131\u011f\u0131m <b>When<\/b> fonksiyonu da ba\u011flamdan yola \u00e7\u0131karak t\u00fcr ba\u011flamas\u0131 yapabilmemize imkan vermektedir;<\/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=\"\">Bind&lt;IGunlukDeposu>().To&lt;MailGunlukDeposu>().When(talep => talep.Target.Member.DeclaringType.Name.EndsWith(\"Islemleri\"));<\/pre>\n\n\n\n<p>&nbsp;&nbsp; \u00d6rne\u011fimizde ad\u0131 \u201c<em>Islemleri<\/em>\u201d ile biten t\u00fcm s\u0131n\u0131flar i\u00e7in <em>IGunlukDeposu<\/em> aray\u00fcz\u00fcn\u00fcn <em>MailGunlukDeposu<\/em> t\u00fcr\u00fcne ba\u011flanmas\u0131 isteniyor.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Fabrika fonksiyonlar\u0131 ile T\u00fcr Ba\u011flama;<\/h3>\n\n\n\n<p>&nbsp;&nbsp; Ba\u011flama g\u00f6re t\u00fcr ba\u011flamaya ili\u015fkin \u015fimdiye kadar payla\u015ft\u0131\u011f\u0131m y\u00f6ntemleri inceledi\u011fimizde hepsinde \u00f6ncelikle t\u00fcr ba\u011flamay\u0131 tan\u0131mlad\u0131\u011f\u0131m\u0131z\u0131 ard\u0131ndan da bu ba\u011flama i\u00e7in bir ko\u015ful ortaya koydu\u011fumuzu g\u00f6rebilirsiniz. Bu y\u00f6ntem her ne kadar pek \u00e7ok senaryoda i\u015fimizi g\u00f6r\u00fcyor olsa da kimi yaz\u0131l\u0131mlarda daha da esnek hareket edilmek istenebilir. Ninject tasar\u0131m\u0131nda bu gibi senaryolarda g\u00f6z \u00f6n\u00fcne al\u0131narak her t\u00fcr ba\u011flama talebinde geli\u015ftiricinin yazd\u0131\u011f\u0131 karar verici bir fonksiyonun \u00e7al\u0131\u015ft\u0131r\u0131lmas\u0131na imkan verilmi\u015ftir. Bu i\u015flem i\u00e7in a\u015fa\u011f\u0131daki \u015fekilde bir delegate kabul eden <b>ToMethod<\/b> fonksiyonu kullan\u0131labilir;<\/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=\"\">Func&lt;IContext, T1> fonksiyon<\/pre>\n\n\n\n<p>&nbsp;&nbsp; Burada <b>T1<\/b> ile ba\u011flanacak t\u00fcr \u00f6rne\u011fi temsil edilmektedir. ToMethod\u2019un kullan\u0131m\u0131 ba\u011flanacak t\u00fcr\u00fcn dinamik olarak de\u011fi\u015febilmesine izin vermek amac\u0131yla \u00f6ncekilere g\u00f6re biraz daha farkl\u0131d\u0131r. <b>Bind<\/b> ifadesinden sonra <b>To<\/b> fonksiyon \u00e7a\u011fr\u0131s\u0131 yer almamaktad\u0131r.<\/p>\n\n\n\n<p>&nbsp;&nbsp; ToMethod\u2019un kullan\u0131m\u0131na \u00f6rnek vermek gerekirse. Son \u00f6rne\u011fimizden yola \u00e7\u0131kal\u0131m;<\/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 class AnaModul : NinjectModule {\n    public override void Load() {\n        Bind&lt;IVeriDeposu>().To&lt;XmlDosyaVeriDesposu>();\n\n        Bind&lt;IGunlukDeposu>().To&lt;TextGunlukDeposu>();\n        Bind&lt;IGunlukDeposu>().To&lt;MailGunlukDeposu>().When(request => request.Target.Member.DeclaringType.Name.EndsWith(\"Islemleri\"));\n    }\n}<\/pre>\n\n\n\n<p>&nbsp;&nbsp; Ayn\u0131 t\u00fcr ba\u011flamas\u0131n\u0131 ToMethod ile \u015fu \u015fekilde de yapabilmemiz m\u00fcmk\u00fcn;<\/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 class AnaModul : NinjectModule {\n    public override void Load() {\n        Bind&lt;IVeriDeposu>().To&lt;XmlDosyaVeriDesposu>();\n\n        Bind&lt;IGunlukDeposu>().ToMethod(baglam => baglam.Request.Target.Member.DeclaringType.Name.EndsWith(\"Islemleri\") ?\n            (IGunlukDeposu)new MailGunlukDeposu() : new TextGunlukDeposu());\n    }\n}<\/pre>\n\n\n\n<p>&nbsp;&nbsp; Bu kodun ise daha <em>Ninject<\/em> hali ise \u015fu 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=\"\">public class AnaModul : NinjectModule {\n    public override void Load() {\n        Bind&lt;IVeriDeposu>().To&lt;XmlDosyaVeriDesposu>();\n\n        Bind&lt;IGunlukDeposu>().ToMethod(baglam => baglam.Request.Target.Member.DeclaringType.Name.EndsWith(\"Islemleri\") ?\n            (IGunlukDeposu)baglam.Kernel.Get&lt;MailGunlukDeposu>() : baglam.Kernel.Get&lt;TextGunlukDeposu>());\n    }\n}<\/pre>\n\n\n\n<p>&nbsp;&nbsp; Son \u00f6rnekte t\u00fcrlerin bir \u00f6rne\u011fini do\u011frudan new ile olu\u015fturmak yerine i\u015flem yapt\u0131\u011f\u0131m\u0131z ba\u011flam\u0131n \u00e7ekirde\u011finden talep etti\u011fimizin alt\u0131n\u0131 \u00e7iziyorum. Bu sayede ilgili s\u0131n\u0131flar\u0131n \u00f6rneklerinin olu\u015fturulmas\u0131 s\u0131ras\u0131nda da Ninject\u2019in esnekli\u011fini kullanabiliriz.<\/p>\n\n\n\n<p><b>Pro Tip:<\/b> Burada t\u00fcr karar\u0131n\u0131n her defas\u0131nda fonksiyondan sorulmas\u0131 nedeniyle e\u015fle\u015ftirmelerin \u00f6n belle\u011fe at\u0131lmas\u0131 m\u00fcmk\u00fcn olamayacakt\u0131r. Dolay\u0131s\u0131yla ayn\u0131 sonu\u00e7 al\u0131nmakla birlikte yukar\u0131daki \u00f6rneklerden i\u015finize en uygunu se\u00e7meniz beraberinde \u00f6nemli performans kazan\u0131mlar\u0131 da getirecektir.<\/p>","protected":false},"excerpt":{"rendered":"<p>&nbsp;&nbsp; Ninject konusunda h\u0131zla ilerlerken bir \u00f6nceki makalemizde ileri d\u00fczey konulara da giri\u015f yapm\u0131\u015ft\u0131k. Geldi\u011fimiz noktada art\u0131k t\u00fcr ba\u011flamalar\u0131n\u0131 da otomatize edebildik. Bu makalemde ise Ninject\u2019in bir ba\u015fka y\u00f6n\u00fcne, g\u00fc\u00e7l\u00fc oldu\u011fu bir y\u00f6ne g\u00f6z ataca\u011f\u0131z; T\u00fcrlerin i\u00e7inde bulunduklar\u0131 ba\u011flama g\u00f6re ili\u015fkilendirilmesi. Dikkat edecek olursan\u0131z \u015fimdiye kadar geldi\u011fimiz noktada t\u00fcrlerin ba\u011flanmas\u0131 tamamen statikti. \u00d6rne\u011fin; IGunlukDeposu uygulaman\u0131n&#8230;<\/p>\n<p><a class=\"read-more\" href=\"https:\/\/fatihboy.com\/en\/ninject-baglama-gore-sekillenen-tur-baglamalari\/\">Read More<\/a><\/p>","protected":false},"author":1,"featured_media":33462,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[77,28],"tags":[41,315,314],"class_list":["post-33461","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-csharp","category-turkce","tag-c","tag-dependency-injection","tag-ninject"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.7 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Ninject \u2013 Ba\u011flama g\u00f6re \u015eekillenen T\u00fcr Ba\u011flamalar\u0131 - 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\/ninject-baglama-gore-sekillenen-tur-baglamalari\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Ninject \u2013 Ba\u011flama g\u00f6re \u015eekillenen T\u00fcr Ba\u011flamalar\u0131 - Fatih Boy\" \/>\n<meta property=\"og:description\" content=\"&nbsp;&nbsp; Ninject konusunda h\u0131zla ilerlerken bir \u00f6nceki makalemizde ileri d\u00fczey konulara da giri\u015f yapm\u0131\u015ft\u0131k. Geldi\u011fimiz noktada art\u0131k t\u00fcr ba\u011flamalar\u0131n\u0131 da otomatize edebildik. Bu makalemde ise Ninject\u2019in bir ba\u015fka y\u00f6n\u00fcne, g\u00fc\u00e7l\u00fc oldu\u011fu bir y\u00f6ne g\u00f6z ataca\u011f\u0131z; T\u00fcrlerin i\u00e7inde bulunduklar\u0131 ba\u011flama g\u00f6re ili\u015fkilendirilmesi. Dikkat edecek olursan\u0131z \u015fimdiye kadar geldi\u011fimiz noktada t\u00fcrlerin ba\u011flanmas\u0131 tamamen statikti. \u00d6rne\u011fin; IGunlukDeposu uygulaman\u0131n...Read More\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihboy.com\/en\/ninject-baglama-gore-sekillenen-tur-baglamalari\/\" \/>\n<meta property=\"og:site_name\" content=\"Fatih Boy\" \/>\n<meta property=\"article:published_time\" content=\"2014-08-04T15:15:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-06-17T07:34:38+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/fatihboy.com\/wp-content\/uploads\/2021\/06\/doctor-hand-vaccine.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1800\" \/>\n\t<meta property=\"og:image:height\" content=\"1200\" \/>\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=\"8 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihboy.com\/ninject-baglama-gore-sekillenen-tur-baglamalari\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihboy.com\/ninject-baglama-gore-sekillenen-tur-baglamalari\/\"},\"author\":{\"name\":\"Fatih Boy\",\"@id\":\"https:\/\/fatihboy.com\/#\/schema\/person\/6b06a41d42eed36eaa0780fbeb774158\"},\"headline\":\"Ninject \u2013 Ba\u011flama g\u00f6re \u015eekillenen T\u00fcr Ba\u011flamalar\u0131\",\"datePublished\":\"2014-08-04T15:15:00+00:00\",\"dateModified\":\"2021-06-17T07:34:38+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihboy.com\/ninject-baglama-gore-sekillenen-tur-baglamalari\/\"},\"wordCount\":1847,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihboy.com\/#\/schema\/person\/6b06a41d42eed36eaa0780fbeb774158\"},\"image\":{\"@id\":\"https:\/\/fatihboy.com\/ninject-baglama-gore-sekillenen-tur-baglamalari\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/fatihboy.com\/wp-content\/uploads\/2021\/06\/doctor-hand-vaccine.jpg\",\"keywords\":[\"C#\",\"Dependency Injection\",\"Ninject\"],\"articleSection\":[\"C#\",\"T\u00fcrk\u00e7e\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihboy.com\/ninject-baglama-gore-sekillenen-tur-baglamalari\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihboy.com\/ninject-baglama-gore-sekillenen-tur-baglamalari\/\",\"url\":\"https:\/\/fatihboy.com\/ninject-baglama-gore-sekillenen-tur-baglamalari\/\",\"name\":\"Ninject \u2013 Ba\u011flama g\u00f6re \u015eekillenen T\u00fcr Ba\u011flamalar\u0131 - Fatih Boy\",\"isPartOf\":{\"@id\":\"https:\/\/fatihboy.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/fatihboy.com\/ninject-baglama-gore-sekillenen-tur-baglamalari\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/fatihboy.com\/ninject-baglama-gore-sekillenen-tur-baglamalari\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/fatihboy.com\/wp-content\/uploads\/2021\/06\/doctor-hand-vaccine.jpg\",\"datePublished\":\"2014-08-04T15:15:00+00:00\",\"dateModified\":\"2021-06-17T07:34:38+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihboy.com\/ninject-baglama-gore-sekillenen-tur-baglamalari\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihboy.com\/ninject-baglama-gore-sekillenen-tur-baglamalari\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/fatihboy.com\/ninject-baglama-gore-sekillenen-tur-baglamalari\/#primaryimage\",\"url\":\"https:\/\/fatihboy.com\/wp-content\/uploads\/2021\/06\/doctor-hand-vaccine.jpg\",\"contentUrl\":\"https:\/\/fatihboy.com\/wp-content\/uploads\/2021\/06\/doctor-hand-vaccine.jpg\",\"width\":1800,\"height\":1200},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihboy.com\/ninject-baglama-gore-sekillenen-tur-baglamalari\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/fatihboy.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Ninject \u2013 Ba\u011flama g\u00f6re \u015eekillenen T\u00fcr Ba\u011flamalar\u0131\"}]},{\"@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":"Ninject \u2013 Ba\u011flama g\u00f6re \u015eekillenen T\u00fcr Ba\u011flamalar\u0131 - 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\/ninject-baglama-gore-sekillenen-tur-baglamalari\/","og_locale":"en_US","og_type":"article","og_title":"Ninject \u2013 Ba\u011flama g\u00f6re \u015eekillenen T\u00fcr Ba\u011flamalar\u0131 - Fatih Boy","og_description":"&nbsp;&nbsp; Ninject konusunda h\u0131zla ilerlerken bir \u00f6nceki makalemizde ileri d\u00fczey konulara da giri\u015f yapm\u0131\u015ft\u0131k. Geldi\u011fimiz noktada art\u0131k t\u00fcr ba\u011flamalar\u0131n\u0131 da otomatize edebildik. Bu makalemde ise Ninject\u2019in bir ba\u015fka y\u00f6n\u00fcne, g\u00fc\u00e7l\u00fc oldu\u011fu bir y\u00f6ne g\u00f6z ataca\u011f\u0131z; T\u00fcrlerin i\u00e7inde bulunduklar\u0131 ba\u011flama g\u00f6re ili\u015fkilendirilmesi. Dikkat edecek olursan\u0131z \u015fimdiye kadar geldi\u011fimiz noktada t\u00fcrlerin ba\u011flanmas\u0131 tamamen statikti. \u00d6rne\u011fin; IGunlukDeposu uygulaman\u0131n...Read More","og_url":"https:\/\/fatihboy.com\/en\/ninject-baglama-gore-sekillenen-tur-baglamalari\/","og_site_name":"Fatih Boy","article_published_time":"2014-08-04T15:15:00+00:00","article_modified_time":"2021-06-17T07:34:38+00:00","og_image":[{"width":1800,"height":1200,"url":"https:\/\/fatihboy.com\/wp-content\/uploads\/2021\/06\/doctor-hand-vaccine.jpg","type":"image\/jpeg"}],"author":"Fatih Boy","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Fatih Boy","Est. reading time":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihboy.com\/ninject-baglama-gore-sekillenen-tur-baglamalari\/#article","isPartOf":{"@id":"https:\/\/fatihboy.com\/ninject-baglama-gore-sekillenen-tur-baglamalari\/"},"author":{"name":"Fatih Boy","@id":"https:\/\/fatihboy.com\/#\/schema\/person\/6b06a41d42eed36eaa0780fbeb774158"},"headline":"Ninject \u2013 Ba\u011flama g\u00f6re \u015eekillenen T\u00fcr Ba\u011flamalar\u0131","datePublished":"2014-08-04T15:15:00+00:00","dateModified":"2021-06-17T07:34:38+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihboy.com\/ninject-baglama-gore-sekillenen-tur-baglamalari\/"},"wordCount":1847,"commentCount":0,"publisher":{"@id":"https:\/\/fatihboy.com\/#\/schema\/person\/6b06a41d42eed36eaa0780fbeb774158"},"image":{"@id":"https:\/\/fatihboy.com\/ninject-baglama-gore-sekillenen-tur-baglamalari\/#primaryimage"},"thumbnailUrl":"https:\/\/fatihboy.com\/wp-content\/uploads\/2021\/06\/doctor-hand-vaccine.jpg","keywords":["C#","Dependency Injection","Ninject"],"articleSection":["C#","T\u00fcrk\u00e7e"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihboy.com\/ninject-baglama-gore-sekillenen-tur-baglamalari\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/fatihboy.com\/ninject-baglama-gore-sekillenen-tur-baglamalari\/","url":"https:\/\/fatihboy.com\/ninject-baglama-gore-sekillenen-tur-baglamalari\/","name":"Ninject \u2013 Ba\u011flama g\u00f6re \u015eekillenen T\u00fcr Ba\u011flamalar\u0131 - Fatih Boy","isPartOf":{"@id":"https:\/\/fatihboy.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/fatihboy.com\/ninject-baglama-gore-sekillenen-tur-baglamalari\/#primaryimage"},"image":{"@id":"https:\/\/fatihboy.com\/ninject-baglama-gore-sekillenen-tur-baglamalari\/#primaryimage"},"thumbnailUrl":"https:\/\/fatihboy.com\/wp-content\/uploads\/2021\/06\/doctor-hand-vaccine.jpg","datePublished":"2014-08-04T15:15:00+00:00","dateModified":"2021-06-17T07:34:38+00:00","breadcrumb":{"@id":"https:\/\/fatihboy.com\/ninject-baglama-gore-sekillenen-tur-baglamalari\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihboy.com\/ninject-baglama-gore-sekillenen-tur-baglamalari\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/fatihboy.com\/ninject-baglama-gore-sekillenen-tur-baglamalari\/#primaryimage","url":"https:\/\/fatihboy.com\/wp-content\/uploads\/2021\/06\/doctor-hand-vaccine.jpg","contentUrl":"https:\/\/fatihboy.com\/wp-content\/uploads\/2021\/06\/doctor-hand-vaccine.jpg","width":1800,"height":1200},{"@type":"BreadcrumbList","@id":"https:\/\/fatihboy.com\/ninject-baglama-gore-sekillenen-tur-baglamalari\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/fatihboy.com\/"},{"@type":"ListItem","position":2,"name":"Ninject \u2013 Ba\u011flama g\u00f6re \u015eekillenen T\u00fcr Ba\u011flamalar\u0131"}]},{"@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\/33461","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=33461"}],"version-history":[{"count":1,"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/posts\/33461\/revisions"}],"predecessor-version":[{"id":33463,"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/posts\/33461\/revisions\/33463"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/media\/33462"}],"wp:attachment":[{"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/media?parent=33461"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/categories?post=33461"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/tags?post=33461"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}