{"id":33440,"date":"2014-07-31T18:37:00","date_gmt":"2014-07-31T15:37:00","guid":{"rendered":"https:\/\/fatihboy.com\/?p=33440"},"modified":"2021-06-17T09:44:14","modified_gmt":"2021-06-17T06:44:14","slug":"ninject-otomatik-tur-baglamalari","status":"publish","type":"post","link":"https:\/\/fatihboy.com\/en\/ninject-otomatik-tur-baglamalari\/","title":{"rendered":"Ninject, Otomatik T\u00fcr Ba\u011flamalar\u0131"},"content":{"rendered":"<p>&nbsp;&nbsp; Ninject konusunda, <a href=\"\/en\/?tag=ninject\" target=\"_blank\" rel=\"noopener noreferrer\">\u00f6nceki makalelerim<\/a> ard\u0131ndan temel d\u00fczeyde ve h\u0131zla projelerimizde uygulayabilece\u011fimiz bilgi birikimine sahip oldu\u011funuza inan\u0131yorum. Art\u0131k s\u0131ra yava\u015f yava\u015f daha ileri konulardan bahsetmekte. \u0130lk konumuz t\u00fcr ba\u011flamalar\u0131nda otomasyona gitmek\u2026<\/p>\n\n\n\n<p>&nbsp;&nbsp; Diyelim ki; \u00f6nceki makalelerimde verdi\u011fim \u00f6rneklerden farkl\u0131 olarak, modul projelerimizin i\u00e7erisinde ba\u011flanmas\u0131 gereken pek \u00e7ok mod\u00fcl\u00fcm\u00fcz bulunuyor. Bu durumda hepsini tek tek mod\u00fcl i\u00e7erisinde ba\u011flamaya \u00e7al\u0131\u015fmak hem zaman kayb\u0131na neden olacakt\u0131r, hem de hataya\/unutkanl\u0131\u011fa \u00e7ok a\u00e7\u0131k olacakt\u0131r. Kafan\u0131zda canland\u0131rabilmek ad\u0131na, a\u015fa\u011f\u0131daki \u00f6rne\u011fe bir g\u00f6z atal\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        Bind&lt;IGunlukDeposu>().To&lt;TextGunlukDeposu>();\n        Bind&lt;IKullaniciDeposu>().To&lt;KullaniciDeposu>();\n        Bind&lt;IGrupDeposu>().To&lt;GrupDeposu>();\n        Bind&lt;IYetkilendirmeDeposu>().To&lt;YetkilendirmeDeposu>();\n        Bind&lt;IYapilandirmaDeposu>().To&lt;YapilandirmaDeposu>();\n        Bind&lt;IKurulumDeposu>().To&lt;KurulumDeposu>();\n        Bind&lt;IKimlikDogrulamaDeposu>().To&lt;KimlikDogrulamaDeposu>();\n        Bind&lt;IBirimDeposu>().To&lt;BirimDeposu>();\n        Bind&lt;IHariciYetkilendirmeDeposu>().To&lt;HariciYetkilendirmeDeposu>();\n\n        \/\/v.b.\n        \/\/v.b.\n        \/\/v.b.\n    }\n}<\/pre>\n\n\n\n<p>&nbsp;&nbsp; Dolay\u0131s\u0131yla bizim bir \u015fekilde \u00e7oklu t\u00fcr ba\u011flama i\u015fini otomatize etmemiz gerekiyor. Bu noktada imdad\u0131m\u0131za Ninject\u2019in <a href=\"https:\/\/www.nuget.org\/packages\/ninject.extensions.conventions\/\" target=\"_blank\" rel=\"noopener noreferrer\"><strong>Ninject.Extensions.Conventions<\/strong><\/a> eklentisi yeti\u015fiyor.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/fatihboy.com\/wp-content\/uploads\/2014\/07\/Ninject.Extensions.Conventions.png\"><img decoding=\"async\" src=\"https:\/\/fatihboy.com\/wp-content\/uploads\/2014\/07\/Ninject.Extensions.Conventions.png\" alt=\"Ninject.Extensions.Conventions\"\/><\/a><\/figure>\n\n\n\n<p>&nbsp;&nbsp; Ninject.Extensions.Conventions NuGet paketini projemizi y\u00fcklememiz ard\u0131ndan IKernel aray\u00fcz\u00fc i\u00e7in yeni bir geni\u015fletme fonksiyonunun tan\u0131mland\u0131\u011f\u0131n\u0131 g\u00f6receksiniz;<\/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 static void Bind(this IBindingRoot kernel, Action&lt;Ninject.Extensions.Conventions.Syntax.IFromSyntax> configure)<\/pre>\n\n\n\n<p>&nbsp;&nbsp; \u00d6ncelikle, bu geni\u015fletme fonksiyonunun <strong>Ninject.Extensions.Conventions<\/strong> namespace\u2019i alt\u0131nda tan\u0131mlanm\u0131\u015f olmas\u0131 nedeniyle using\u2019lerinizi aras\u0131na bunu da eklemelisiniz. Sonras\u0131nda a\u015fa\u011f\u0131daki \u015fekilde fonksiyon \u00e7a\u011fr\u0131lar\u0131 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=\"\">IKernel kernel = new StandardKernel();\n\nkernel.Bind(yapilandirma => {\n    yapilandirma.FromThisAssembly()\n         .SelectAllClasses()\n         .BindSingleInterface();\n});<\/pre>\n\n\n\n<p>&nbsp; Yukar\u0131daki kod par\u00e7ac\u0131\u011f\u0131 sayesinde i\u00e7inde bulundu\u011fumuz assembly i\u00e7erisinde yer alan t\u00fcm <em>public<\/em> s\u0131n\u0131flar se\u00e7ilerek implement\u2019e ettikleri tek bir aray\u00fcz i\u00e7in otomatik olarak t\u00fcr ba\u011flamalar\u0131 yap\u0131lacakt\u0131r. Bizim \u00f6rne\u011fimiz \u00fczerinden gidersek, ayr\u0131 bir assembly i\u00e7erisinde tan\u0131mlad\u0131\u011f\u0131m\u0131z mod\u00fcl\u00fcm\u00fcz\u00fcn ayn\u0131 i\u015flemi yapmas\u0131n\u0131 a\u015fa\u011f\u0131daki \u015fekilde sa\u011flayabiliriz;<\/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        this.Bind(yapilandirma => {\n            yapilandirma.FromThisAssembly()\n            .SelectAllClasses()\n            .BindDefaultInterface();\n        });\n    }\n}<\/pre>\n\n\n\n<p><strong>Not :<\/strong> \u00d6rnekte <em>Bind<\/em> fonksiyonunu <em>this<\/em> \u00fczerinden giderek kulland\u0131\u011f\u0131m\u0131n alt\u0131n\u0131 \u00e7izmek isterim. Aksi takdir\u2019de geni\u015fletme fonksiyonumuzu kullanamay\u0131z\u2026<\/p>\n\n\n\n<p>&nbsp;&nbsp; Ger\u00e7ek hayattaki projelerimizde mod\u00fclleriniz i\u00e7erisindeki s\u0131n\u0131flar\u0131n\u0131z\u0131n d\u0131\u015far\u0131dan do\u011frudan g\u00f6r\u00fclebilmesi (<em>public tan\u0131mlanmas\u0131<\/em>) tavsiye etmedi\u011fim bir durum. Sizde benimle ayn\u0131 d\u00fc\u015f\u00fcn\u00fcyor ve hepsini internal olarak i\u015faretlediyseniz yukar\u0131daki \u00f6rne\u011fi <strong>IncludingNonePublicTypes<\/strong> \u00e7a\u011fr\u0131s\u0131n\u0131da ekleyerek 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=\"\">public class AnaModul : NinjectModule {\n    public override void Load() {\n        this.Bind(yapilandirma => {\n            yapilandirma.FromThisAssembly()\n                .IncludingNonePublicTypes()\n                .SelectAllClasses()\n                .BindDefaultInterface();\n        });\n    }\n}<\/pre>\n\n\n\n<p>&nbsp;&nbsp; \u00d6rne\u011fimizi geli\u015ftirmeye devam edelim. Bir sonraki ad\u0131mda abstract bir s\u0131n\u0131ftan t\u00fcreyen t\u00fcm t\u00fcrler i\u00e7in ba\u011flama yapt\u0131\u011f\u0131n\u0131z\u0131 varsayal\u0131m. 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        this.Bind(yapilandirma => {\n            yapilandirma.FromThisAssembly()\n                .IncludingNonePublicTypes()\n                .SelectAllClasses()\n                .InheritedFrom&lt;AbstractSinif>()\n                .BindBase();\n        });\n    }\n}<\/pre>\n\n\n\n<p>\u00d6rne\u011fimizin buldu\u011fu t\u00fcrleri temel s\u0131n\u0131flar\u0131na ba\u011flad\u0131\u011f\u0131n\u0131n alt\u0131n\u0131 \u00e7iziyorum.<\/p>\n\n\n\n<p>&nbsp;&nbsp; Ger\u00e7ek hayattaki kullan\u0131mlarda kimi zaman t\u00fcr ba\u011flamalar\u0131n\u0131 daha detayl\u0131 belirtmek gerekebilir. Bu konuda akl\u0131ma gelen ilk \u00f6rnek domain\u2019imize ait aray\u00fczleri implement\u2019e eden s\u0131n\u0131flar\u0131n belirli bir namespace alt\u0131nda toplanmas\u0131 geliyor. Bu senaryoda Bind fonksiyonumuzu a\u015fa\u011f\u0131daki \u015fekilde namespace\u2019de vererek daha detayland\u0131rmam\u0131z 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        this.Bind(yapilandirma => {\n            yapilandirma.FromThisAssembly()\n                .IncludingNonePublicTypes()\n                .SelectAllClasses().InNamespaces(\"Com.Enterprisecoding.DependencyInjection.Imp\")\n                .InheritedFrom&lt;IVeriDeposu>()\n                .BindBase();\n        });\n    }\n}<\/pre>\n\n\n\n<p>&nbsp;&nbsp; Ninject.Extensions.Conventions sorgular\u0131n\u0131n yap\u0131s\u0131n\u0131 inceledi\u011fimizde 5 par\u00e7adan olu\u015ftu\u011funu g\u00f6rebiliriz;<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>Assembly se\u00e7imi,<\/li><li>T\u00fcr\/Bile\u015fen se\u00e7imi,<\/li><li>\u0130stisna se\u00e7imi,<\/li><li>Ba\u011flanacak servis se\u00e7imi,<\/li><li>Ba\u011flamalar\u0131n yap\u0131land\u0131r\u0131lmas\u0131<\/li><\/ol>\n\n\n\n<h1 class=\"wp-block-heading\">Assembly Se\u00e7imi;<\/h1>\n\n\n\n<p>&nbsp;&nbsp; \u00d6rneklerimizde varsay\u0131lan olarak i\u00e7inde bulundu\u011fumuz assembly\u2019de t\u00fcr se\u00e7imi yapt\u0131\u011f\u0131m\u0131za hat\u0131rlatmak isterim.&nbsp; Ninject.Extensions.Conventions assembly se\u00e7imi konusunda ger\u00e7ekten de \u00e7ok esnektir.<\/p>\n\n\n\n<p><strong>&nbsp;&nbsp; FromThisAssembly<\/strong> fonksiyonu ile yapt\u0131\u011f\u0131m\u0131z bu se\u00e7ime alternatif olarak <strong>From<\/strong> fonksiyonu ile assembly veya assembly ad\u0131n\u0131 vererek i\u015flem yapabilmemiz m\u00fcmk\u00fcn. Bunun yan\u0131nda; <strong>FromAssemblyContaining<\/strong> fonksiyonu ile belirti\u011fimiz t\u00fcr\u00fcn dahil oldu\u011fu assembly\u2019yi, <strong>FromAssembliesInPath<\/strong> fonksiyonu ile belirli bir klas\u00f6r alt\u0131ndaki assembly\u2019leri, <strong>FromAssembliesMatching<\/strong> fonksiyonu ile belirli bir kal\u0131ba g\u00f6re adland\u0131r\u0131lm\u0131\u015f assembly\u2019leri kabul etmemiz m\u00fcmk\u00fcn.<\/p>\n\n\n\n<p>&nbsp;&nbsp; T\u00fcm bu sayd\u0131klar\u0131m yan\u0131nda, Ninject.Extensions.Conventions esnekli\u011fini bir ad\u0131m daha ileri ta\u015f\u0131yarak <strong>Join<\/strong> fonksiyonu yard\u0131m\u0131yla birden fazla assembly ba\u011flamas\u0131n\u0131 tek kalemde yapabilmenize imkan vermektedir.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">T\u00fcr\/Bile\u015fen Se\u00e7imi;<\/h1>\n\n\n\n<p>&nbsp;&nbsp; \u0130lk ad\u0131mda analizi yap\u0131lacak t\u00fcr havuzunu se\u00e7menin ard\u0131ndan s\u0131rada bu havuz i\u00e7erisindeki ba\u011flama yap\u0131lacak t\u00fcrleri se\u00e7meye. T\u00fcr\/Bile\u015fen se\u00e7imi, daha \u00f6nceki makalelerimde g\u00f6zd\u00fc\u011f\u00fcm\u00fcz standart ba\u011flama c\u00fcmleci\u011finde <em>To&lt;T&gt;<\/em> k\u0131sm\u0131na denk gelmektedir. Assembly se\u00e7iminde g\u00f6rd\u00fc\u011f\u00fcm\u00fcz esnekli\u011fe benzer bir esneklik t\u00fcr\/bile\u015fen se\u00e7iminde de bizlere sunulmakta.<\/p>\n\n\n\n<p>&nbsp;&nbsp; <strong>InNamespaces<\/strong> fonksiyonu bize belirli bir namespace alt\u0131ndaki t\u00fcrler i\u00e7in i\u015flem yapma olana\u011f\u0131 sunacakt\u0131r. Alternatif olarak; <strong>InNamespaceOf<\/strong> fonksiyonu ile bir t\u00fcr vererek bu t\u00fcr ile ayn\u0131 namespace alt\u0131ndaki t\u00fcm t\u00fcrlerin i\u015flenmesini de sa\u011flayabiliriz. Bu iki fonksiyonun tam z\u0131tt\u0131 olarak se\u00e7im havuzunu belirli bir namespace d\u0131\u015f\u0131ndakiler olarak belirtmemiz de m\u00fcmk\u00fcn. Bunun i\u00e7in s\u0131ras\u0131yla <strong>NotInNamespaces<\/strong> ve <strong>NotInNamespaceOf<\/strong> fonksiyonlar\u0131 kullan\u0131labilir.<\/p>\n\n\n\n<p>&nbsp;&nbsp; \u00d6rne\u011fini de payla\u015ft\u0131\u011f\u0131m <strong>InheritedFromAny<\/strong> fonksiyonu ile belirtti\u011fimiz t\u00fcrden kal\u0131t\u0131lanlar\u0131 se\u00e7ebiliriz.<\/p>\n\n\n\n<p>&nbsp;&nbsp; Se\u00e7imimizi belirli bir \u00f6z niteli\u011fe sahip olan ya da olmayanlar olarak da belirtebilmemiz m\u00fcmk\u00fcn. Bunun i\u00e7in <strong>WithAttribute<\/strong> ve <strong>WithoutAttribute<\/strong> fonksiyonlar\u0131 kullan\u0131labilir.<\/p>\n\n\n\n<p>&nbsp;&nbsp; U\u00e7 bir \u00f6rnekte <strong>StartingWith<\/strong> ve <strong>EndingWith<\/strong> fonksiyonlar\u0131d\u0131r. Bu fonksiyonlar yard\u0131m\u0131yla belirli bir \u00f6n ek ile ba\u015flayan ya da biten t\u00fcrlerin se\u00e7ilebilmesi m\u00fcmk\u00fcn.<\/p>\n\n\n\n<p>&nbsp;&nbsp; Bu konudaki son u\u00e7 \u00f6rne\u011fimiz ise <strong>WhichAreGeneric<\/strong> ve <strong>WhichAreNotGeneric<\/strong> fonksiyonlar. Ad\u0131ndan da tahmin edebilece\u011finiz gibi bu iki fonksiyon generic olan ya da olmayan t\u00fcrlerin se\u00e7ilebilmesini sa\u011flamaktalar.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\u0130stisna Se\u00e7imi;<\/h1>\n\n\n\n<p>&nbsp;&nbsp; Kimi senaryolarda, se\u00e7ti\u011fimiz t\u00fcr\/bile\u015fen k\u00fcmesi i\u00e7isinde yer almas\u0131n\u0131 istemedi\u011finiz, harici olarak eklemek istedi\u011finiz t\u00fcr\u2019ler de bulunabilir. Bu tarz senaryolar Ninject.Extensions.Conventions eklentisinin geli\u015ftirilmesi s\u0131ras\u0131nda g\u00f6z \u00f6n\u00fcne al\u0131narak istisna tan\u0131mlamalar\u0131 yap\u0131labilmesi sa\u011flanm\u0131\u015f.<\/p>\n\n\n\n<p>&nbsp;&nbsp; Bu kapsamda <strong>Including<\/strong> ve <strong>Excluding<\/strong> fonksiyonlar\u0131 ile yukar\u0131da \u00f6rne\u011fini payla\u015ft\u0131\u011f\u0131m <strong>IncludingNonePublicTypes<\/strong> fonksiyonu kullan\u0131labilir.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Ba\u011flanacak Servis Se\u00e7imi;<\/h1>\n\n\n\n<p>&nbsp;&nbsp; Yukar\u0131da s\u0131ralad\u0131\u011f\u0131m ad\u0131mlar ard\u0131ndan elimizde i\u015flem yapmak istedi\u011fimiz t\u00fcr k\u00fcmesi olu\u015ftu. Art\u0131k s\u0131rada bu k\u00fcmeyi hangi t\u00fcrlere ba\u011flayaca\u011f\u0131m\u0131zda. Ba\u011flanacak servis se\u00e7imi, daha \u00f6nceki makalelerimde g\u00f6zd\u00fc\u011f\u00fcm\u00fcz standart ba\u011flama c\u00fcmleci\u011finde <em>Bind&lt;T&gt;<\/em> k\u0131sm\u0131na denk gelmektedir. Servis ba\u011flama mant\u0131\u011f\u0131 temel, ortak bir se\u00e7ime dayal\u0131 olmal\u0131d\u0131r.<\/p>\n\n\n\n<p>&nbsp;&nbsp; Bu konuda da yine elimizde olduk\u00e7a geni\u015f se\u00e7enekler yer al\u0131yor. <strong>BindAllBaseClasses<\/strong> fonksiyonu t\u00fcr\u00fc t\u00fcm temel s\u0131n\u0131flar\u0131na ba\u011flayacakt\u0131r. Bu sayede temel s\u0131n\u0131flar\u0131ndan birisi talep edildi\u011finde se\u00e7ili t\u00fcr sunulacakt\u0131r. Benzer \u015fekilde t\u00fcr\u00fc t\u00fcm implemente etti\u011fi aray\u00fczlere ba\u011flamak i\u00e7in <strong>BindAllInterfaces<\/strong> fonksiyonu kullan\u0131labilir. Bunlara alternatif olarak <strong>BindBase<\/strong> fonksiyonu ile t\u00fcr sadece bir \u00fcst temel san\u0131f\u0131na ba\u011flanabilir.&nbsp; <strong>BindDefaultInterface<\/strong> fonksiyonu t\u00fcr\u00fc sadece varsay\u0131lan aray\u00fcz\u00fcne ba\u011flayacakt\u0131r. Birden fazla aray\u00fcze ba\u011flamak i\u00e7in ise <strong>BindDefaultInterfaces<\/strong> fonksiyonu kullan\u0131labilir.&nbsp; Aray\u00fczlerle ilgili kullanabilece\u011finiz bir di\u011fer fonksiyon da <strong>BindSingleInterface<\/strong> fonksiyonudur. Bu fonksiyon t\u00fcr\u00fcn yaln\u0131z ve yaln\u0131z bir interface\u2019i implement etti\u011fi durumlarda t\u00fcr ba\u011flamas\u0131 yapacakt\u0131r. <em>BindSingleInterface<\/em> fonksiyonu hi\u00e7 bir aray\u00fcz\u00fc implement\u2019e etmeyen ya da birden fazla aray\u00fcz\u00fc implement\u2019e eden s\u0131n\u0131flar\u0131 yok sayacakt\u0131r. <strong>BindToSelf<\/strong> fonksiyonu (<em>size tan\u0131d\u0131k gelecektir<\/em>) t\u00fcr\u00fc kendine ba\u011flayacakt\u0131r. <strong>BindUsingRegex<\/strong> fonksiyonu aray\u00fcz\u00fc verilen \u015fablona uygun t\u00fcrlerin ba\u011flanmas\u0131nda kullan\u0131labilir.<\/p>\n\n\n\n<p>&nbsp;&nbsp; Servis se\u00e7imi ile ilgili yukar\u0131da s\u0131ralad\u0131\u011f\u0131m fonksiyonlar\u0131n i\u015finizi g\u00f6rmedi\u011fi durumlarda size <strong>BindSelection<\/strong> fonksiyonunu kullanmay\u0131 tavsiye ederim. Bu fonksiyon t\u00fcr se\u00e7imi i\u00e7in a\u015fa\u011f\u0131daki delegate\u2019e kullanacakt\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=\"\">delegate IEnumerable&lt;Type> ServiceSelector(Type type, IEnumerable&lt;Type> baseTypes)<\/pre>\n\n\n\n<p>&nbsp; Bu delagate\u2019ten d\u00f6nen listeler Ninject taraf\u0131nda t\u00fcr ba\u011flamas\u0131nda kullan\u0131lacakt\u0131r.<\/p>\n\n\n\n<p>&nbsp;&nbsp; Her ne kadar yukar\u0131da s\u0131ralad\u0131\u011f\u0131m fonksiyonlardan birinin pek \u00e7ok senaryoda i\u015finizi g\u00f6rece\u011fini d\u00fc\u015f\u00fcnsem de, aksi durumlarda <strong>IBindingGenerator<\/strong> aray\u00fcz\u00fc imdad\u0131n\u0131za yeti\u015fecektir. <em>IBindingGenerator<\/em> aray\u00fcz\u00fcnden t\u00fcreyen kendi \u00f6zel s\u0131n\u0131f\u0131n\u0131z\u0131 <strong>BindWith&lt;T&gt;<\/strong> ya da <strong>BindWith(IBindingGenerator generator)<\/strong> fonksiyonlar\u0131na ge\u00e7meniz yeterli olacakt\u0131r.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Ba\u011flamalar\u0131n Yap\u0131land\u0131rmas\u0131;<\/h1>\n\n\n\n<p>&nbsp;&nbsp; \u015eimdiye kadar payla\u015ft\u0131\u011f\u0131m ad\u0131mlarla temel, genel ge\u00e7er t\u00fcr ba\u011flamalar\u0131n\u0131 otomatize etmi\u015f oluyoruz. Bunun yan\u0131nda bir \u00f6nceki makalemde payla\u015ft\u0131\u011f\u0131m ya\u015fam d\u00f6ng\u00fcs\u00fc se\u00e7imi v.b. konularda yap\u0131land\u0131rma talep edilebilir. Bu detayda unutulmayarak ba\u011flamalar\u0131n yap\u0131land\u0131r\u0131lmas\u0131 i\u00e7in&nbsp; <strong>Configure<\/strong> fonksiyonu sunulmu\u015ftur.<\/p>\n\n\n\n<p>&nbsp;&nbsp; A\u015fa\u011f\u0131daki \u00f6rnekte <em>Com.Enterprisecoding.DependencyInjection.Imp.Singleton<\/em> namespace\u2019i alt\u0131ndaki t\u00fcm t\u00fcrlerin singleton ya\u015fam d\u00f6ng\u00fcs\u00fcne sahip olmas\u0131 sa\u011flanm\u0131\u015ft\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        this.Bind(yapilandirma => {\n            yapilandirma.FromThisAssembly()\n                .IncludingNonePublicTypes()\n                .SelectAllClasses().InNamespaces(\"Com.Enterprisecoding.DependencyInjection.Imp.Singleton\")\n                .InheritedFrom&lt;IVeriDeposu>()\n                .BindBase()\n                .Configure(baglama => baglama.InSingletonScope());\n        });\n    }\n}<\/pre>\n\n\n\n<p>&nbsp;&nbsp; Benzer \u015fekilde di\u011fer ya\u015fam d\u00f6ng\u00fcs\u00fc se\u00e7eneklerinin de belirtilebilmesi m\u00fcmk\u00fcnd\u00fcr.<\/p>\n\n\n\n<p>&nbsp;&nbsp; <strong>ConfigureFor<\/strong> fonksiyonu yard\u0131m\u0131yla \u00f6zelde bir s\u0131n\u0131f i\u00e7in farkl\u0131 yap\u0131land\u0131rma verilebilmesi de m\u00fcmk\u00fcnd\u00fcr.<\/p>\n\n\n\n<p>&nbsp;&nbsp; Son olarak; Ninject.Extensions.Conventions eklentisinin g\u00fcc\u00fcn\u00fc anlatabilmek ad\u0131na, a\u015fa\u011f\u0131daki \u00f6rnekte mod\u00fcl\u00fcm\u00fcz\u00fcn bulundu\u011fu s\u0131n\u0131ftaki herhangi bir ata s\u0131n\u0131ftan t\u00fcrememi\u015f, bir interface\u2019i implemente etmemi\u015f ve inner class olarak tan\u0131mlanmam\u0131\u015f t\u00fcm s\u0131n\u0131flar\u0131 singleton olarak kendilerine ba\u011flamaktay\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=\"\">public class AnaModul : NinjectModule {\n    public override void Load() {\n        this.Bind(yapilandirma => yapilandirma\n            .FromThisAssembly()\n            .SelectAllClasses()\n            .Where(tur => tur.BaseType == typeof (object)\n                    &amp;&amp; tur.GetInterfaces().Length == 0\n                    &amp;&amp; tur.DeclaringType == null)\n            .BindToSelf()\n            .Configure(b => b.InSingletonScope())\n        );\n    }\n}<\/pre>","protected":false},"excerpt":{"rendered":"<p>&nbsp;&nbsp; Ninject konusunda, \u00f6nceki makalelerim ard\u0131ndan temel d\u00fczeyde ve h\u0131zla projelerimizde uygulayabilece\u011fimiz bilgi birikimine sahip oldu\u011funuza inan\u0131yorum. Art\u0131k s\u0131ra yava\u015f yava\u015f daha ileri konulardan bahsetmekte. \u0130lk konumuz t\u00fcr ba\u011flamalar\u0131nda otomasyona gitmek\u2026 &nbsp;&nbsp; Diyelim ki; \u00f6nceki makalelerimde verdi\u011fim \u00f6rneklerden farkl\u0131 olarak, modul projelerimizin i\u00e7erisinde ba\u011flanmas\u0131 gereken pek \u00e7ok mod\u00fcl\u00fcm\u00fcz bulunuyor. Bu durumda hepsini tek tek mod\u00fcl&#8230;<\/p>\n<p><a class=\"read-more\" href=\"https:\/\/fatihboy.com\/en\/ninject-otomatik-tur-baglamalari\/\">Read More<\/a><\/p>","protected":false},"author":1,"featured_media":33441,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[77,28],"tags":[41,315,314],"class_list":["post-33440","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, Otomatik 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-otomatik-tur-baglamalari\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Ninject, Otomatik T\u00fcr Ba\u011flamalar\u0131 - Fatih Boy\" \/>\n<meta property=\"og:description\" content=\"&nbsp;&nbsp; Ninject konusunda, \u00f6nceki makalelerim ard\u0131ndan temel d\u00fczeyde ve h\u0131zla projelerimizde uygulayabilece\u011fimiz bilgi birikimine sahip oldu\u011funuza inan\u0131yorum. Art\u0131k s\u0131ra yava\u015f yava\u015f daha ileri konulardan bahsetmekte. \u0130lk konumuz t\u00fcr ba\u011flamalar\u0131nda otomasyona gitmek\u2026 &nbsp;&nbsp; Diyelim ki; \u00f6nceki makalelerimde verdi\u011fim \u00f6rneklerden farkl\u0131 olarak, modul projelerimizin i\u00e7erisinde ba\u011flanmas\u0131 gereken pek \u00e7ok mod\u00fcl\u00fcm\u00fcz bulunuyor. Bu durumda hepsini tek tek mod\u00fcl...Read More\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihboy.com\/en\/ninject-otomatik-tur-baglamalari\/\" \/>\n<meta property=\"og:site_name\" content=\"Fatih Boy\" \/>\n<meta property=\"article:published_time\" content=\"2014-07-31T15:37:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-06-17T06:44:14+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/fatihboy.com\/wp-content\/uploads\/2021\/06\/nurse-with-syringe.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=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihboy.com\/ninject-otomatik-tur-baglamalari\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihboy.com\/ninject-otomatik-tur-baglamalari\/\"},\"author\":{\"name\":\"Fatih Boy\",\"@id\":\"https:\/\/fatihboy.com\/#\/schema\/person\/6b06a41d42eed36eaa0780fbeb774158\"},\"headline\":\"Ninject, Otomatik T\u00fcr Ba\u011flamalar\u0131\",\"datePublished\":\"2014-07-31T15:37:00+00:00\",\"dateModified\":\"2021-06-17T06:44:14+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihboy.com\/ninject-otomatik-tur-baglamalari\/\"},\"wordCount\":1643,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihboy.com\/#\/schema\/person\/6b06a41d42eed36eaa0780fbeb774158\"},\"image\":{\"@id\":\"https:\/\/fatihboy.com\/ninject-otomatik-tur-baglamalari\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/fatihboy.com\/wp-content\/uploads\/2021\/06\/nurse-with-syringe.jpg\",\"keywords\":[\"C#\",\"Dependency Injection\",\"Ninject\"],\"articleSection\":[\"C#\",\"T\u00fcrk\u00e7e\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihboy.com\/ninject-otomatik-tur-baglamalari\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihboy.com\/ninject-otomatik-tur-baglamalari\/\",\"url\":\"https:\/\/fatihboy.com\/ninject-otomatik-tur-baglamalari\/\",\"name\":\"Ninject, Otomatik T\u00fcr Ba\u011flamalar\u0131 - Fatih Boy\",\"isPartOf\":{\"@id\":\"https:\/\/fatihboy.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/fatihboy.com\/ninject-otomatik-tur-baglamalari\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/fatihboy.com\/ninject-otomatik-tur-baglamalari\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/fatihboy.com\/wp-content\/uploads\/2021\/06\/nurse-with-syringe.jpg\",\"datePublished\":\"2014-07-31T15:37:00+00:00\",\"dateModified\":\"2021-06-17T06:44:14+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihboy.com\/ninject-otomatik-tur-baglamalari\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihboy.com\/ninject-otomatik-tur-baglamalari\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/fatihboy.com\/ninject-otomatik-tur-baglamalari\/#primaryimage\",\"url\":\"https:\/\/fatihboy.com\/wp-content\/uploads\/2021\/06\/nurse-with-syringe.jpg\",\"contentUrl\":\"https:\/\/fatihboy.com\/wp-content\/uploads\/2021\/06\/nurse-with-syringe.jpg\",\"width\":1800,\"height\":1199},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihboy.com\/ninject-otomatik-tur-baglamalari\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/fatihboy.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Ninject, Otomatik 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, Otomatik 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-otomatik-tur-baglamalari\/","og_locale":"en_US","og_type":"article","og_title":"Ninject, Otomatik T\u00fcr Ba\u011flamalar\u0131 - Fatih Boy","og_description":"&nbsp;&nbsp; Ninject konusunda, \u00f6nceki makalelerim ard\u0131ndan temel d\u00fczeyde ve h\u0131zla projelerimizde uygulayabilece\u011fimiz bilgi birikimine sahip oldu\u011funuza inan\u0131yorum. Art\u0131k s\u0131ra yava\u015f yava\u015f daha ileri konulardan bahsetmekte. \u0130lk konumuz t\u00fcr ba\u011flamalar\u0131nda otomasyona gitmek\u2026 &nbsp;&nbsp; Diyelim ki; \u00f6nceki makalelerimde verdi\u011fim \u00f6rneklerden farkl\u0131 olarak, modul projelerimizin i\u00e7erisinde ba\u011flanmas\u0131 gereken pek \u00e7ok mod\u00fcl\u00fcm\u00fcz bulunuyor. Bu durumda hepsini tek tek mod\u00fcl...Read More","og_url":"https:\/\/fatihboy.com\/en\/ninject-otomatik-tur-baglamalari\/","og_site_name":"Fatih Boy","article_published_time":"2014-07-31T15:37:00+00:00","article_modified_time":"2021-06-17T06:44:14+00:00","og_image":[{"width":1800,"height":1199,"url":"https:\/\/fatihboy.com\/wp-content\/uploads\/2021\/06\/nurse-with-syringe.jpg","type":"image\/jpeg"}],"author":"Fatih Boy","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Fatih Boy","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihboy.com\/ninject-otomatik-tur-baglamalari\/#article","isPartOf":{"@id":"https:\/\/fatihboy.com\/ninject-otomatik-tur-baglamalari\/"},"author":{"name":"Fatih Boy","@id":"https:\/\/fatihboy.com\/#\/schema\/person\/6b06a41d42eed36eaa0780fbeb774158"},"headline":"Ninject, Otomatik T\u00fcr Ba\u011flamalar\u0131","datePublished":"2014-07-31T15:37:00+00:00","dateModified":"2021-06-17T06:44:14+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihboy.com\/ninject-otomatik-tur-baglamalari\/"},"wordCount":1643,"commentCount":0,"publisher":{"@id":"https:\/\/fatihboy.com\/#\/schema\/person\/6b06a41d42eed36eaa0780fbeb774158"},"image":{"@id":"https:\/\/fatihboy.com\/ninject-otomatik-tur-baglamalari\/#primaryimage"},"thumbnailUrl":"https:\/\/fatihboy.com\/wp-content\/uploads\/2021\/06\/nurse-with-syringe.jpg","keywords":["C#","Dependency Injection","Ninject"],"articleSection":["C#","T\u00fcrk\u00e7e"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihboy.com\/ninject-otomatik-tur-baglamalari\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/fatihboy.com\/ninject-otomatik-tur-baglamalari\/","url":"https:\/\/fatihboy.com\/ninject-otomatik-tur-baglamalari\/","name":"Ninject, Otomatik T\u00fcr Ba\u011flamalar\u0131 - Fatih Boy","isPartOf":{"@id":"https:\/\/fatihboy.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/fatihboy.com\/ninject-otomatik-tur-baglamalari\/#primaryimage"},"image":{"@id":"https:\/\/fatihboy.com\/ninject-otomatik-tur-baglamalari\/#primaryimage"},"thumbnailUrl":"https:\/\/fatihboy.com\/wp-content\/uploads\/2021\/06\/nurse-with-syringe.jpg","datePublished":"2014-07-31T15:37:00+00:00","dateModified":"2021-06-17T06:44:14+00:00","breadcrumb":{"@id":"https:\/\/fatihboy.com\/ninject-otomatik-tur-baglamalari\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihboy.com\/ninject-otomatik-tur-baglamalari\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/fatihboy.com\/ninject-otomatik-tur-baglamalari\/#primaryimage","url":"https:\/\/fatihboy.com\/wp-content\/uploads\/2021\/06\/nurse-with-syringe.jpg","contentUrl":"https:\/\/fatihboy.com\/wp-content\/uploads\/2021\/06\/nurse-with-syringe.jpg","width":1800,"height":1199},{"@type":"BreadcrumbList","@id":"https:\/\/fatihboy.com\/ninject-otomatik-tur-baglamalari\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/fatihboy.com\/"},{"@type":"ListItem","position":2,"name":"Ninject, Otomatik 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\/33440","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=33440"}],"version-history":[{"count":3,"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/posts\/33440\/revisions"}],"predecessor-version":[{"id":33444,"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/posts\/33440\/revisions\/33444"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/media\/33441"}],"wp:attachment":[{"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/media?parent=33440"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/categories?post=33440"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/tags?post=33440"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}