{"id":29,"date":"2010-04-14T19:24:17","date_gmt":"2010-04-14T17:24:17","guid":{"rendered":"\/post\/Calisma-Zamani-Dinamik-Kod-Olusturma.aspx"},"modified":"2021-06-14T17:56:50","modified_gmt":"2021-06-14T14:56:50","slug":"calisma-zamani-dinamik-kod-olusturma","status":"publish","type":"post","link":"https:\/\/fatihboy.com\/en\/calisma-zamani-dinamik-kod-olusturma\/","title":{"rendered":"\u00c7al\u0131\u015fma-Zaman\u0131 Dinamik Kod Olu\u015fturma"},"content":{"rendered":"<p>Yaz\u0131l\u0131m geli\u015ftiriciler olarak her zaman kullan\u0131c\u0131lar\u0131n ihtiya\u00e7lar\u0131n\u0131 kar\u015f\u0131lamak i\u00e7in derleme-zaman\u0131 yazm\u0131\u015f oldu\u011fumuz kodlar\u0131 kullan\u0131r\u0131z; ama zaman zaman ke\u015fke kendi kendini yazan, \u00e7al\u0131\u015ft\u0131ran programlar\u0131m\u0131z olsun dedi\u011finiz olmu\u015ftur. \u0130\u015fte tam bu d\u00fc\u015f\u00fcncede olan t\u00fcm yaz\u0131l\u0131m geli\u015ftiricilerin en sevece\u011fi C# namespace\u2019i san\u0131r\u0131m <em>System.Reflection.Emit<\/em> olacakt\u0131r. Bu makalemde sizlere bu namespace alt\u0131nda yer alan s\u0131n\u0131flar yard\u0131m\u0131yla \u00e7al\u0131\u015fma-zaman\u0131nda nas\u0131l dinamik olarak assembly \u00fcretip \u00e7al\u0131\u015ft\u0131rabilece\u011finizi anlatmaya \u00e7al\u0131\u015faca\u011f\u0131m.<\/p>\n\n\n\n<p>Yaz\u0131l\u0131m d\u00fcnyas\u0131n\u0131n en pop\u00fcler \u00f6rne\u011fi olan &#8220;<em>Merhaba D\u00fcnya&#8221;<\/em> \u00f6rne\u011fi \u00fczerinden System.Reflection.Emit namespace\u2019ini kullanmay\u0131 \u00f6rneklemeye \u00e7al\u0131\u015faca\u011f\u0131m. A\u015fa\u011f\u0131da nam-\u00ee de\u011fer &#8220;Merhaba D\u00fcnya&#8221; \u00f6rne\u011finin C# versiyonunu bulabilirsiniz. Asl\u0131nda \u00f6rne\u011fimiz i\u00e7erisinde kompleks bir kod yok, bir konsol uygulamas\u0131, ve sadece ekrana &#8220;Merhaba Dinamik D\u00fcnya&#8221; yazmakta.<\/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 DinamikSinif {\n    public static void Main(string[] parametreler) {\n        Console.WriteLine(\"Merhaba Dinamik D\u00fcnya\");\n    }\n}<\/pre>\n\n\n\n<p>Yukar\u0131daki kod par\u00e7ac\u0131\u011f\u0131n\u0131 inceledi\u011fimizde \u00fc\u00e7 ana b\u00f6l\u00fcm g\u00f6rmekteyiz; DinamikSinif ad\u0131yla bir s\u0131n\u0131f tan\u0131mlamas\u0131, bu s\u0131n\u0131f i\u00e7erisinde yer alan ve string parametre listesini kabul eden Main ad\u0131yla statik bir metod (ayn\u0131 zamanda uygulamam\u0131z\u0131n giri\u015f noktas\u0131), konsola &#8220;Merhaba Dinamik D\u00fcnya&#8221; yazd\u0131ran metod \u00e7a\u011fr\u0131s\u0131.<\/p>\n\n\n\n<p>\u0130\u015fe \u00f6ncelikle yukar\u0131daki program\u0131n tan\u0131mlanaca\u011f\u0131 assembly\u2019e bir isim vererek ba\u015flamal\u0131y\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=\"\">var assemblyAdi = new AssemblyName(\"MerhabaDinamikDunya\");\nvar assemblyBuilder = AppDomain.CurrentDomain.DefineDynamicAssembly(assemblyAdi, AssemblyBuilderAccess.RunAndSave);<\/pre>\n\n\n\n<p>Bu sat\u0131rlarda MerhabaDinamikDunya ad\u0131yla bir dinamik assembly tan\u0131mlamas\u0131 yap\u0131lmakta. <em>DefineDynamicAssembly<\/em> metoduna ge\u00e7ilen ikinci parametrede olu\u015fturulacak olan bu dinamik assembly\u2019nin \u00e7al\u0131\u015ft\u0131r\u0131labilece\u011fi, ayn\u0131 zamanda da dosya sisteminde saklanabilece\u011fi belirtilmekte.&nbsp; Burada kullan\u0131lm\u0131\u015f olan AssemblyBuilderAccess enum\u2019u a\u015fa\u011f\u0131daki de\u011ferleri alabilir;<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>Run<\/td><td>Dinamik assembly \u00e7al\u0131\u015ft\u0131r\u0131labilir; fakat saklanamaz<\/td><\/tr><tr><td>Save<\/td><td>Dinamik assembly saklanabilr; fakat \u00e7al\u0131\u015ft\u0131r\u0131lamaz<\/td><\/tr><tr><td>RunAndSave<\/td><td>Dinamik assembly hem \u00e7al\u0131\u015ft\u0131r\u0131labilir, hem de saklanabilir<\/td><\/tr><tr><td>ReflectionOnly<\/td><td>Dinamik assembly sadece reflection yap\u0131labilir bir context\u2019e y\u00fcklenir ve \u00e7al\u0131\u015ft\u0131r\u0131lamaz<\/td><\/tr><tr><td>RunAndCollect<\/td><td>Dinamik assembly \u00e7al\u0131\u015ft\u0131r\u0131lmas\u0131 sonras\u0131 kald\u0131r\u0131larak haf\u0131zadan temizlenebilir.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Yukar\u0131daki kod ile dinamik assembly olu\u015fturabilmek i\u00e7in ilk ad\u0131mlar\u0131 att\u0131k. Devam\u0131nda, assembly i\u00e7erisindeki i\u015flemlerimizi ger\u00e7ekle\u015ftirece\u011fimiz bir mod\u00fcl tan\u0131m\u0131 yapmal\u0131y\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=\"\">var modul = assemblyBuilder.DefineDynamicModule(\"MerhabaDinamikDunya.exe\");<\/pre>\n\n\n\n<p>Art\u0131k elimizde as\u0131l i\u015fimizi yapabilece\u011fimiz bir mod\u00fcl\u00fcm\u00fcz bulunmakta. Bu noktadan itibaren t\u00fcm dikkatimizi olu\u015fturmak istedi\u011fimiz \u00f6rnek uygulamam\u0131z\u0131n \u00fc\u00e7 ana b\u00f6l\u00fcm\u00fcne verebiliriz; s\u0131n\u0131f tan\u0131mlamas\u0131, ana metodumuz ve konsola &#8220;Merhaba Dinamik D\u00fcnya&#8221; yazmak.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">S\u0131n\u0131f Tan\u0131mlamas\u0131;<\/h4>\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=\"\">var typeBuilder = modul.DefineType(\"DinamikSinif\", TypeAttributes.Public | TypeAttributes.Class);<\/pre>\n\n\n\n<p>Bu sat\u0131rda mod\u00fcl\u00fcm\u00fcz i\u00e7erisinde DinamikSinif ad\u0131yla yeni bir t\u00fcr olu\u015fturmaktay\u0131z. Verdi\u011fimiz&nbsp; <em>TypeAttribute<\/em>\u2019ler (System.Reflection alt\u0131nda yer almakta) vas\u0131tas\u0131yla bu olu\u015fturdu\u011fumuz t\u00fcr\u00fcn herkes\u00e7e eri\u015filebilir bir s\u0131n\u0131f oldu\u011funu belirtmekteyiz. TypeAttribute\u2019u ayn\u0131 zamanda FlagsAttribute\u2019\u00fc ile i\u015faretlenmi\u015f olmas\u0131 sebebiyle, yukar\u0131da oldu\u011fu gibi, bitwise combinasyonlarla bu metoda birden fazla say\u0131da parametre olarak ge\u00e7ilebilir.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Ana Metodumuz ;<\/h4>\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=\"\">var metodbuilder = typeBuilder.DefineMethod(\"Main\",\n    MethodAttributes.HideBySig | MethodAttributes.Static | MethodAttributes.Public,\n    typeof(void),\n    new Type[] { typeof(string[]) });<\/pre>\n\n\n\n<p>Bu sat\u0131rda, olu\u015fturdu\u011fumuz t\u00fcr i\u00e7erisinde yeni bir metod tan\u0131mlamaktay\u0131z. \u0130lk parametrede verdi\u011fimiz &#8220;Main&#8221; ad\u0131yla olu\u015fturulacak bu metod ikinci parametrede verdi\u011fimiz <em>MethodAttributes<\/em>\u2019ler sayesinde <em>static public<\/em> olarak tan\u0131mlanacakt\u0131r. TypeAttributes\u2019da oldu\u011fu gibi MethodAttributes\u2019da FlagsAttribute\u2019\u00fc ile i\u015faretlenmi\u015ftir ve farkl\u0131 kombinasyonlarda bitwise olarak kullan\u0131labilir. \u00fc\u00e7\u00fcnc\u00fc parametrede void t\u00fcr\u00fcn\u00fc ge\u00e7erek metodumuzun bir d\u00f6n\u00fc\u015f t\u00fcr\u00fc olmad\u0131\u011f\u0131n\u0131 belirtiyoruz. Son parametre ile de metodumuzun alaca\u011f\u0131 parametrelerin t\u00fcrlerini belirtmi\u015f oluyoruz.<\/p>\n\n\n\n<p>\u015eimdiye kadar takip etmi\u015f oldu\u011fumuz ad\u0131mlarla birlikte asl\u0131nda assembly\u2019mizin \u00f6nemli bir b\u00f6l\u00fcm\u00fcn\u00fc tamamlam\u0131\u015f durumday\u0131z. E\u011fer bu noktada olu\u015fan kodu g\u00f6rebilmi\u015f olsayd\u0131k a\u015fa\u011f\u0131dakine benzer oldu\u011funu g\u00f6r\u00fcrd\u00fck:<\/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 DinamikSinif {\n    public static void Main(string[] parametreler) {<\/pre>\n\n\n\n<p>Dikkatli g\u00f6zler bu g\u00f6r\u00fcnt\u00fcde a\u00e7\u0131lm\u0131\u015f olan parantezlerin hen\u00fcz kapat\u0131lmad\u0131\u011f\u0131 rahatl\u0131kla g\u00f6recektir. Bunu bilerek bu \u015fekilde g\u00f6steriyorum; \u00e7\u00fcnk\u00fc olu\u015fturdu\u011fumuz metod i\u00e7erisine hen\u00fcz <em>return<\/em> kodunu eklemedik. Yaz\u0131m\u0131n devam\u0131nda bunu nas\u0131l yapaca\u011f\u0131n\u0131z\u0131 da g\u00f6sterece\u011fim.<\/p>\n\n\n\n<p><strong>Konsola &#8220;Merhaba Dinamik D\u00fcnya&#8221; yazmak<\/strong><\/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=\"\">var ilOlusturucu = metodbuilder.GetILGenerator();\nilOlusturucu.EmitWriteLine(\"Merhaba Dinamik D\u00fcnya\");<\/pre>\n\n\n\n<p>Bir \u00f6nceki ad\u0131mla birlikte olu\u015fturdu\u011fumuz metodumuzun i\u00e7erisinde i\u015flemlerimizi ancak bir DotNet IL (Intermediate Language) olu\u015fturucu ile ger\u00e7ekle\u015ftirebiliriz. ILGenerator s\u0131n\u0131f\u0131 yard\u0131m\u0131yla verece\u011fimiz komutlar Intermidiate Language\u2019e d\u00f6n\u00fc\u015ft\u00fcr\u00fcl\u00fcr. ILGenerator\u2019\u00fcn pek \u00e7ok metodu yan\u0131nda konsola yazmak i\u00e7in <em>EmitWriteLine<\/em> metodu yer almaktad\u0131r. ILGenerator her ne kadar bize do\u011frudan t\u00fcm DotNet k\u00fct\u00fcphanelerindeki metodlar\u0131 \u00e7a\u011f\u0131rmak i\u00e7in yard\u0131mc\u0131 olmasa da konsola bir \u015feyler yazabilmek i\u00e7in bu \u00f6zel metoda sahiptir.<\/p>\n\n\n\n<p>Peki ILGenerator i\u00e7erisinde bu yard\u0131mc\u0131 metod olmasayd\u0131 konsola bir\u015fey yazamaz m\u0131yd\u0131k? ya da ba\u015fka metod \u00e7a\u011fr\u0131lar\u0131 yapmak istedi\u011fimizde ne yapmal\u0131y\u0131z? Bu iki soruyu a\u015fa\u011f\u0131daki \u00f6rnekle a\u00e7\u0131klamak isterim.<\/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=\"\">lOlusturucu.Emit(OpCodes.Ldstr, \"Merhaba Dinamik D\u00fcnya\");\nilOlusturucu.Emit(OpCodes.Call, typeof(Console).GetMethod(\"WriteLine\", new Type[] { typeof(string) }));<\/pre>\n\n\n\n<p>Bu \u00f6rnekte ikinci sat\u0131rda g\u00f6rd\u00fc\u011f\u00fcm\u00fcz <em>Call<\/em> IL i\u015flem koduyla (OpCodes) <em>Console<\/em> t\u00fcr\u00fc i\u00e7erisinde yer alan <em>WriteLine<\/em> metodunuzun (verilen parametreleri kabul eden) bir \u00f6nceki sat\u0131rda verilen string ile \u00e7a\u011f\u0131r\u0131lmas\u0131 sa\u011flanmakta. Bu iki \u00f6rnekte olu\u015fturulan kodlara <a rel=\"noreferrer noopener\" href=\"http:\/\/www.red-gate.com\/products\/reflector\/\" target=\"_blank\">reflector<\/a> uygulamas\u0131 yard\u0131m\u0131yla bakacak olursak ayn\u0131 \u00e7\u0131kt\u0131ya sahip olduklar\u0131n\u0131 g\u00f6rece\u011fiz.<\/p>\n\n\n\n<p>Neredeyse i\u015fimizi bitirmek \u00fczereyiz. Kodumuza a\u015fa\u011f\u0131daki son dokunu\u015flar\u0131 da ekleyecek olursak en ba\u015ftaki hedefimize ula\u015fm\u0131\u015f olaca\u011f\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=\"\">typeBuilder.CreateType();\n\nassemblyBuilder.SetEntryPoint(metodbuilder, PEFileKinds.ConsoleApplication);\nassemblyBuilder.Save(\"MerhabaDinamikDunya.exe\");<\/pre>\n\n\n\n<p>Bu sat\u0131rlarla \u00f6ncelikle tan\u0131mlamas\u0131n\u0131 yapt\u0131\u011f\u0131m\u0131z t\u00fcr\u00fcn olu\u015fturulmas\u0131n\u0131 sa\u011flamaktay\u0131z. Ard\u0131ndan Assembly\u2019mizin bir konsol uygulamas\u0131 oldu\u011funu ve giri\u015f noktas\u0131n\u0131n olu\u015fturmuz oldu\u011fumuz &#8220;Main&#8221; metodu oldu\u011funu belirtiyoruz. Son olarak ise olu\u015fan assembly\u2019nin &#8220;MerhabaDinamikDunya.exe&#8221; ad\u0131yla uygulamam\u0131z\u0131 \u00e7al\u0131\u015ft\u0131\u011f\u0131 dizine saklanmas\u0131n\u0131 sa\u011fl\u0131yoruz.<\/p>\n\n\n\n<p>T\u00fcm bu ad\u0131mlar ard\u0131ndan bir ad\u0131m geriye \u00e7ekilerek b\u00fcy\u00fck resme bakacak olursak elimizde a\u015fa\u011f\u0131daki \u015fekilde bir kod olu\u015ftu\u011funuz g\u00f6rece\u011fiz:<\/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=\"\">using System;\nusing System.Reflection;\nusing System.Reflection.Emit;\nusing System.Threading;\nusing System.Diagnostics;\n\nnamespace ReflectionEmitOrnegi {\n    class Program {\n        static void Main(string[] args)  {\n            var assemblyAdi = new AssemblyName(\"MerhabaDinamikDunya\");\n            var assemblyBuilder = AppDomain.CurrentDomain.DefineDynamicAssembly(assemblyAdi, AssemblyBuilderAccess.RunAndSave);\n            var modul = assemblyBuilder.DefineDynamicModule(\"MerhabaDinamikDunya.exe\");\n\n            var typeBuilder = modul.DefineType(\"DinamikSinif\", TypeAttributes.Public | TypeAttributes.Class);\n\n            var metodbuilder = typeBuilder.DefineMethod(\"Main\",\n                MethodAttributes.HideBySig | MethodAttributes.Static | MethodAttributes.Public,\n                typeof(void),\n                new Type[] { typeof(string[]) });\n\n            var ilOlusturucu = metodbuilder.GetILGenerator();\n\n            \/\/ilOlusturucu.Emit(OpCodes.Ldstr, \"Merhaba Dinamik D\u00fcnya\");\n            \/\/ilOlusturucu.Emit(OpCodes.Call, typeof(Console).GetMethod(\"WriteLine\", new Type[] { typeof(string) }));\n            ilOlusturucu.EmitWriteLine(\"Merhaba Dinamik D\u00fcnya\");\n\n            ilOlusturucu.Emit(OpCodes.Ret);\n\n            typeBuilder.CreateType();\n\n            assemblyBuilder.SetEntryPoint(metodbuilder, PEFileKinds.ConsoleApplication);\n            assemblyBuilder.Save(\"MerhabaDinamikDunya.exe\");\n        }\n    }\n}<\/pre>\n\n\n\n<p>Bu kodu \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131m\u0131zda, ba\u015fta verdi\u011fimiz i\u015flemi yapan kodu \u00fcretti\u011finiz ve &#8220;MerhabaDinamikDunya.exe&#8221; ad\u0131yla uygulamam\u0131z\u0131n \u00e7al\u0131\u015ft\u0131\u011f\u0131 yere sakland\u0131\u011f\u0131n\u0131 g\u00f6rece\u011fiz.<\/p>\n\n\n\n<p>Dilerseniz olu\u015fturdu\u011funuz bu s\u0131n\u0131f\u0131 saklamadan \u00f6nce uygulaman\u0131z i\u00e7erisinde de kullanabilirsiniz. <em>TypeBuilder<\/em> i\u00e7erisinde yer alan <em>CreateType<\/em> metodu bize uygulamam\u0131z i\u00e7erisinde rahatl\u0131kla kullanabilece\u011fimiz bir t\u00fcr sunacakt\u0131r. Biraz reflection kullanarak bu t\u00fcr i\u00e7erisindeki metodu \u00e7al\u0131\u015ft\u0131rabiliriz;<\/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=\"\">var merhabaDunyaTuru = typeBuilder.CreateType();\nmerhabaDunyaTuru.GetMethod(\"Main\").Invoke(null, new string[] { null });<\/pre>\n\n\n\n<p>Bir &#8220;Merhaba D\u00fcnya&#8221; \u00f6rne\u011finden yola \u00e7\u0131karak anlatmaya \u00e7al\u0131\u015ft\u0131\u011f\u0131m dinamik kod olu\u015fturma \u00f6rne\u011fi ger\u00e7ek d\u00fcnyada \u00e7ok faydal\u0131 yerlerde kullan\u0131labilir. Bu kullan\u0131mlar i\u00e7in akl\u0131ma gelen ilk \u00f6rnek verilen bir aray\u00fcz \u00fczerinde bir web servise ba\u011flan\u0131lmas\u0131n\u0131 sa\u011flayan bir vekil (proxy) s\u0131n\u0131f. Olu\u015fturdu\u011funuz k\u00fct\u00fcphaneyi kullanacak ki\u015filere a\u015fa\u011f\u0131daki gibi \u00e7ok basit \u015fekilde servislere ba\u011flanmalar\u0131n\u0131 sa\u011flamak sizce de ho\u015f olmaz m\u0131?<\/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=\"\">IWebServisim servisVekili = WebServisVekilFabrikasi.VekilOlustur&amp;lt;IWebServisim&amp;gt;(\"service adresi\");<\/pre>\n\n\n\n<p>Bunun i\u00e7in \u00e7al\u0131\u015fma-zaman\u0131nda olu\u015fturaca\u011f\u0131m\u0131z ve IWebServisim aray\u00fcz\u00fcn\u00fc implement\u2019e eden bir dinamik t\u00fcr yetecektir. Bu dinamik t\u00fcr implement\u2019e etti\u011fi metodlar vas\u0131tas\u0131yla kendi i\u00e7erisinde ilgili web servis metodunu \u00e7a\u011f\u0131rabilir.<\/p>\n\n\n\n<p>\u00c7ok s\u0131kl\u0131kla tekrar eden ve reflection kullanarak yapt\u0131\u011f\u0131n\u0131z i\u015flerinizi System.Reflection.Emit namespace\u2019i alt\u0131ndaki s\u0131n\u0131flar\u0131 kullanarak yapman\u0131z durumunda olduk\u00e7a \u00f6nemli bir performans kazan\u0131m\u0131 sa\u011flayabilirsiniz.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Kompleks kodlarda bu y\u00f6ntemin uygulanmas\u0131<\/h2>\n\n\n\n<p>Kompleks olan kodlar\u0131n bu y\u00f6ntemle \u00fcretilmesi zor olabilir. Bu gibi durumlarda a\u015fa\u011f\u0131da anlatt\u0131\u011f\u0131m yolla h\u0131zl\u0131ca ilerleyebilirsiniz.<\/p>\n\n\n\n<p>\u00d6ncelikle RedGate web sitesine giderek <a href=\"http:\/\/www.red-gate.com\/products\/reflector\/\" target=\"_blank\" rel=\"noopener noreferrer\">Reflector<\/a> \u00fcr\u00fcn\u00fcn\u00fcn \u00fccretsiz s\u00fcr\u00fcm\u00fcn\u00fc indirmelisiniz. Kuruluma ihtiya\u00e7 duymayan bu program sayesinde herhangi bir algoritma ile i\u00e7eri\u011fi okunamamas\u0131 i\u00e7in kar\u0131\u015ft\u0131r\u0131lmam\u0131\u015f olan t\u00fcm DotNet assembly\u2019lerini inceleyebilirsiniz.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/fatihboy.com\/wp-content\/uploads\/2010\/04\/reflector.jpg\"><img decoding=\"async\" src=\"https:\/\/fatihboy.com\/wp-content\/uploads\/2010\/04\/reflector_thumb.jpg\" alt=\"Reflector\"\/><\/a><\/figure>\n\n\n\n<p>Yapman\u0131z gereken, i\u00e7eri\u011fini incelemek istedi\u011finiz s\u0131n\u0131fa gelip ters t\u0131klamak ve gelen men\u00fcden Disassemble se\u00e7ene\u011fini se\u00e7mek. Bunu yapt\u0131\u011f\u0131n\u0131zda sol tarafta kaynak kodunu istedi\u011finiz dilde inceleyebilirsiniz.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/fatihboy.com\/wp-content\/uploads\/2010\/04\/reflector_disassemble.png\"><img decoding=\"async\" src=\"https:\/\/fatihboy.com\/wp-content\/uploads\/2010\/04\/reflector_disassemble_thumb.png\" alt=\"Reflector Disassemble\"\/><\/a><\/figure>\n\n\n\n<p>\u00dcst tarafta yer alan combobox yard\u0131m\u0131yla kodu istedi\u011finiz dilde g\u00f6r\u00fcnt\u00fcleyebilirsiniz. Eklenti deste\u011fi olan bu \u00fcr\u00fcn\u2019e CodePlex i\u00e7erisinde yer alan <a href=\"http:\/\/reflectoraddins.codeplex.com\/wikipage?title=ReflectionEmitLanguage&amp;referringTitle=Home\" target=\"_blank\" rel=\"noopener noreferrer\">ReflectionEmitLanguage<\/a> eklentisini kurarak isterseniz bu assembly\u2019nin olu\u015fmas\u0131 i\u00e7in kullan\u0131labilecek Reflection.Emit kodlar\u0131n\u0131 kolayl\u0131kla g\u00f6rebilirsiniz. Yapman\u0131z gereken sadece eklentiyi kurduktan sonra dil olarak yukar\u0131daki diller combobox\u2019\u0131 i\u00e7erisinde Reflection.Emit\u2019i se\u00e7mek.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/fatihboy.com\/wp-content\/uploads\/2010\/04\/reflector_reflectionEmit.jpg\"><img decoding=\"async\" src=\"https:\/\/fatihboy.com\/wp-content\/uploads\/2010\/04\/reflector_reflectionEmit_thumb.jpg\" alt=\"Reflector Reflection.Emit\"\/><\/a><\/figure>\n\n\n\n<p>Bu i\u015flem sonras\u0131 istedi\u011finiz k\u00fct\u00fcphane i\u00e7in Reflection.Emit kodunu g\u00f6rebilirsiniz; ki bu \u00f6zellik karma\u015f\u0131k kodlar\u0131n \u00fcretilmesi noktas\u0131nda sizin i\u00e7in can simidi olacakt\u0131r.<\/p>","protected":false},"excerpt":{"rendered":"<p>Yaz\u0131l\u0131m geli\u015ftiriciler olarak her zaman kullan\u0131c\u0131lar\u0131n ihtiya\u00e7lar\u0131n\u0131 kar\u015f\u0131lamak i\u00e7in derleme-zaman\u0131 yazm\u0131\u015f oldu\u011fumuz kodlar\u0131 kullan\u0131r\u0131z; ama zaman zaman ke\u015fke kendi kendini yazan, \u00e7al\u0131\u015ft\u0131ran programlar\u0131m\u0131z olsun dedi\u011finiz olmu\u015ftur. \u0130\u015fte tam bu d\u00fc\u015f\u00fcncede olan t\u00fcm yaz\u0131l\u0131m geli\u015ftiricilerin en sevece\u011fi C# namespace\u2019i san\u0131r\u0131m System.Reflection.Emit olacakt\u0131r. Bu makalemde sizlere bu namespace alt\u0131nda yer alan s\u0131n\u0131flar yard\u0131m\u0131yla \u00e7al\u0131\u015fma-zaman\u0131nda nas\u0131l dinamik olarak&#8230;<\/p>\n<p><a class=\"read-more\" href=\"https:\/\/fatihboy.com\/en\/calisma-zamani-dinamik-kod-olusturma\/\">Read More<\/a><\/p>","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[77,28],"tags":[41,74],"class_list":["post-29","post","type-post","status-publish","format-standard","hentry","category-csharp","category-turkce","tag-c","tag-reflection"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.7 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>\u00c7al\u0131\u015fma-Zaman\u0131 Dinamik Kod Olu\u015fturma - 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\/calisma-zamani-dinamik-kod-olusturma\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u00c7al\u0131\u015fma-Zaman\u0131 Dinamik Kod Olu\u015fturma - Fatih Boy\" \/>\n<meta property=\"og:description\" content=\"Yaz\u0131l\u0131m geli\u015ftiriciler olarak her zaman kullan\u0131c\u0131lar\u0131n ihtiya\u00e7lar\u0131n\u0131 kar\u015f\u0131lamak i\u00e7in derleme-zaman\u0131 yazm\u0131\u015f oldu\u011fumuz kodlar\u0131 kullan\u0131r\u0131z; ama zaman zaman ke\u015fke kendi kendini yazan, \u00e7al\u0131\u015ft\u0131ran programlar\u0131m\u0131z olsun dedi\u011finiz olmu\u015ftur. \u0130\u015fte tam bu d\u00fc\u015f\u00fcncede olan t\u00fcm yaz\u0131l\u0131m geli\u015ftiricilerin en sevece\u011fi C# namespace\u2019i san\u0131r\u0131m System.Reflection.Emit olacakt\u0131r. Bu makalemde sizlere bu namespace alt\u0131nda yer alan s\u0131n\u0131flar yard\u0131m\u0131yla \u00e7al\u0131\u015fma-zaman\u0131nda nas\u0131l dinamik olarak...Read More\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihboy.com\/en\/calisma-zamani-dinamik-kod-olusturma\/\" \/>\n<meta property=\"og:site_name\" content=\"Fatih Boy\" \/>\n<meta property=\"article:published_time\" content=\"2010-04-14T17:24:17+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-06-14T14:56:50+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/fatihboy.com\/wp-content\/uploads\/2010\/04\/reflector_thumb.jpg\" \/>\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\/calisma-zamani-dinamik-kod-olusturma\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihboy.com\/calisma-zamani-dinamik-kod-olusturma\/\"},\"author\":{\"name\":\"Fatih Boy\",\"@id\":\"https:\/\/fatihboy.com\/#\/schema\/person\/6b06a41d42eed36eaa0780fbeb774158\"},\"headline\":\"\u00c7al\u0131\u015fma-Zaman\u0131 Dinamik Kod Olu\u015fturma\",\"datePublished\":\"2010-04-14T17:24:17+00:00\",\"dateModified\":\"2021-06-14T14:56:50+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihboy.com\/calisma-zamani-dinamik-kod-olusturma\/\"},\"wordCount\":1495,\"commentCount\":3,\"publisher\":{\"@id\":\"https:\/\/fatihboy.com\/#\/schema\/person\/6b06a41d42eed36eaa0780fbeb774158\"},\"image\":{\"@id\":\"https:\/\/fatihboy.com\/calisma-zamani-dinamik-kod-olusturma\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/fatihboy.com\/wp-content\/uploads\/2010\/04\/reflector_thumb.jpg\",\"keywords\":[\"C#\",\"Reflection\"],\"articleSection\":[\"C#\",\"T\u00fcrk\u00e7e\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihboy.com\/calisma-zamani-dinamik-kod-olusturma\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihboy.com\/calisma-zamani-dinamik-kod-olusturma\/\",\"url\":\"https:\/\/fatihboy.com\/calisma-zamani-dinamik-kod-olusturma\/\",\"name\":\"\u00c7al\u0131\u015fma-Zaman\u0131 Dinamik Kod Olu\u015fturma - Fatih Boy\",\"isPartOf\":{\"@id\":\"https:\/\/fatihboy.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/fatihboy.com\/calisma-zamani-dinamik-kod-olusturma\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/fatihboy.com\/calisma-zamani-dinamik-kod-olusturma\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/fatihboy.com\/wp-content\/uploads\/2010\/04\/reflector_thumb.jpg\",\"datePublished\":\"2010-04-14T17:24:17+00:00\",\"dateModified\":\"2021-06-14T14:56:50+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihboy.com\/calisma-zamani-dinamik-kod-olusturma\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihboy.com\/calisma-zamani-dinamik-kod-olusturma\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/fatihboy.com\/calisma-zamani-dinamik-kod-olusturma\/#primaryimage\",\"url\":\"https:\/\/fatihboy.com\/wp-content\/uploads\/2010\/04\/reflector_thumb.jpg\",\"contentUrl\":\"https:\/\/fatihboy.com\/wp-content\/uploads\/2010\/04\/reflector_thumb.jpg\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihboy.com\/calisma-zamani-dinamik-kod-olusturma\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/fatihboy.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u00c7al\u0131\u015fma-Zaman\u0131 Dinamik Kod Olu\u015fturma\"}]},{\"@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":"\u00c7al\u0131\u015fma-Zaman\u0131 Dinamik Kod Olu\u015fturma - 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\/calisma-zamani-dinamik-kod-olusturma\/","og_locale":"en_US","og_type":"article","og_title":"\u00c7al\u0131\u015fma-Zaman\u0131 Dinamik Kod Olu\u015fturma - Fatih Boy","og_description":"Yaz\u0131l\u0131m geli\u015ftiriciler olarak her zaman kullan\u0131c\u0131lar\u0131n ihtiya\u00e7lar\u0131n\u0131 kar\u015f\u0131lamak i\u00e7in derleme-zaman\u0131 yazm\u0131\u015f oldu\u011fumuz kodlar\u0131 kullan\u0131r\u0131z; ama zaman zaman ke\u015fke kendi kendini yazan, \u00e7al\u0131\u015ft\u0131ran programlar\u0131m\u0131z olsun dedi\u011finiz olmu\u015ftur. \u0130\u015fte tam bu d\u00fc\u015f\u00fcncede olan t\u00fcm yaz\u0131l\u0131m geli\u015ftiricilerin en sevece\u011fi C# namespace\u2019i san\u0131r\u0131m System.Reflection.Emit olacakt\u0131r. Bu makalemde sizlere bu namespace alt\u0131nda yer alan s\u0131n\u0131flar yard\u0131m\u0131yla \u00e7al\u0131\u015fma-zaman\u0131nda nas\u0131l dinamik olarak...Read More","og_url":"https:\/\/fatihboy.com\/en\/calisma-zamani-dinamik-kod-olusturma\/","og_site_name":"Fatih Boy","article_published_time":"2010-04-14T17:24:17+00:00","article_modified_time":"2021-06-14T14:56:50+00:00","og_image":[{"url":"https:\/\/fatihboy.com\/wp-content\/uploads\/2010\/04\/reflector_thumb.jpg","type":"","width":"","height":""}],"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\/calisma-zamani-dinamik-kod-olusturma\/#article","isPartOf":{"@id":"https:\/\/fatihboy.com\/calisma-zamani-dinamik-kod-olusturma\/"},"author":{"name":"Fatih Boy","@id":"https:\/\/fatihboy.com\/#\/schema\/person\/6b06a41d42eed36eaa0780fbeb774158"},"headline":"\u00c7al\u0131\u015fma-Zaman\u0131 Dinamik Kod Olu\u015fturma","datePublished":"2010-04-14T17:24:17+00:00","dateModified":"2021-06-14T14:56:50+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihboy.com\/calisma-zamani-dinamik-kod-olusturma\/"},"wordCount":1495,"commentCount":3,"publisher":{"@id":"https:\/\/fatihboy.com\/#\/schema\/person\/6b06a41d42eed36eaa0780fbeb774158"},"image":{"@id":"https:\/\/fatihboy.com\/calisma-zamani-dinamik-kod-olusturma\/#primaryimage"},"thumbnailUrl":"https:\/\/fatihboy.com\/wp-content\/uploads\/2010\/04\/reflector_thumb.jpg","keywords":["C#","Reflection"],"articleSection":["C#","T\u00fcrk\u00e7e"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihboy.com\/calisma-zamani-dinamik-kod-olusturma\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/fatihboy.com\/calisma-zamani-dinamik-kod-olusturma\/","url":"https:\/\/fatihboy.com\/calisma-zamani-dinamik-kod-olusturma\/","name":"\u00c7al\u0131\u015fma-Zaman\u0131 Dinamik Kod Olu\u015fturma - Fatih Boy","isPartOf":{"@id":"https:\/\/fatihboy.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/fatihboy.com\/calisma-zamani-dinamik-kod-olusturma\/#primaryimage"},"image":{"@id":"https:\/\/fatihboy.com\/calisma-zamani-dinamik-kod-olusturma\/#primaryimage"},"thumbnailUrl":"https:\/\/fatihboy.com\/wp-content\/uploads\/2010\/04\/reflector_thumb.jpg","datePublished":"2010-04-14T17:24:17+00:00","dateModified":"2021-06-14T14:56:50+00:00","breadcrumb":{"@id":"https:\/\/fatihboy.com\/calisma-zamani-dinamik-kod-olusturma\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihboy.com\/calisma-zamani-dinamik-kod-olusturma\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/fatihboy.com\/calisma-zamani-dinamik-kod-olusturma\/#primaryimage","url":"https:\/\/fatihboy.com\/wp-content\/uploads\/2010\/04\/reflector_thumb.jpg","contentUrl":"https:\/\/fatihboy.com\/wp-content\/uploads\/2010\/04\/reflector_thumb.jpg"},{"@type":"BreadcrumbList","@id":"https:\/\/fatihboy.com\/calisma-zamani-dinamik-kod-olusturma\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/fatihboy.com\/"},{"@type":"ListItem","position":2,"name":"\u00c7al\u0131\u015fma-Zaman\u0131 Dinamik Kod Olu\u015fturma"}]},{"@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\/29","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=29"}],"version-history":[{"count":1,"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/posts\/29\/revisions"}],"predecessor-version":[{"id":33389,"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/posts\/29\/revisions\/33389"}],"wp:attachment":[{"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/media?parent=29"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/categories?post=29"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/tags?post=29"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}