{"id":899,"date":"2024-01-09T19:48:50","date_gmt":"2024-01-09T19:48:50","guid":{"rendered":"https:\/\/okankaradag.com\/?p=899"},"modified":"2024-01-09T20:15:09","modified_gmt":"2024-01-09T20:15:09","slug":"net-8-ioc-dependecy-injection-ve-keyedservices","status":"publish","type":"post","link":"https:\/\/okankaradag.com\/en\/net-8-0\/net-8-ioc-dependecy-injection-ve-keyedservices","title":{"rendered":".Net 8 Ioc, Dependecy Injection ve KeyedServices"},"content":{"rendered":"<p class=\" translation-block\"><strong>IoC <\/strong>(inversion of control) and <strong>dependecy injection<\/strong> are very important at .net and oop. We'll examine how to work it, what does it mean in this post. And we'll look new di feaute from .net 8 and difference between <strong>scope<\/strong>, <strong>transient<\/strong>, <strong>singleton <\/strong>.<\/p>\n\n\n\n<h2 id=\"ioc-inversion-of-control-nedir\">IoC (Inversion of Control) Nedir?<\/h2>\n\n\n\n<p class=\" translation-block\">Ioc is a design principle. It providers <strong>loose coupled<\/strong>. Let's explain with a example. We have a car and we are driving it, the car is completely at our control. According to <strong>IoC <\/strong> principle, we take taxi instead ourselves and just we give directions are enough. as a result the design is more flexible and loose coupled.\nWe don''t prefer our object are be tight coopled at business flow.<\/p>\n\n\n\n<h2 id=\"dependecy-injection-nedir\">Dependecy Injection Nedir?<\/h2>\n\n\n\n<p class=\" translation-block\">Dependecy Injection is a design pattern used in the software development process. This pattern reduces the dependency of one class on another and is used for management purposes. If we consider the fundamental features of a car as driving and parking, in my business processes, I'll use the car class as a reference. Whichever object I've linked the car to (BMW, Mercedes, etc.), I'll utilize that. I've used a car with driving and parking features from the bigger picture; one might go faster while another parks better, only the performance varies.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" src=\"https:\/\/okankaradag.com\/wp-content\/uploads\/2024\/01\/Inversion-of-Control-Pattern-image002.jpg\" alt=\"\" class=\"wp-image-901\" width=\"580\" height=\"191\" srcset=\"https:\/\/okankaradag.com\/wp-content\/uploads\/2024\/01\/Inversion-of-Control-Pattern-image002.jpg 500w, https:\/\/okankaradag.com\/wp-content\/uploads\/2024\/01\/Inversion-of-Control-Pattern-image002-300x99.jpg 300w, https:\/\/okankaradag.com\/wp-content\/uploads\/2024\/01\/Inversion-of-Control-Pattern-image002-18x6.jpg 18w\" sizes=\"(max-width: 580px) 100vw, 580px\" \/><\/figure>\n\n\n\n<h2 id=\"net-8-0-dependecy-injection\">.Net 8.0 Dependecy Injection<\/h2>\n\n\n\n<p class=\" translation-block\">there is three method since .net core. These are <strong>AddScoped<\/strong>, <strong>AddTransient<\/strong> and <strong>AddSingleton<\/strong>. Added <strong>AddKeyedScoped<\/strong>, <strong>AddKeyedTransient <\/strong>and <strong>AddKeyedSingleton <\/strong>  with the release of .net 8. We'll examine how to work and why use it of this methods.\nFirstly let's create classes.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:c# decode:true\">public interface IFileStorage\n{\n    string Name { get; set; }\n    Task Save();\n    object Get(string fileKey);\n}<\/pre><\/div>\n\n\n\n<p>iki tane de bu interface&#8217;den t\u00fcreyen s\u0131n\u0131f olsun<\/p>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:c# decode:true\">public class AmazonFileStorage : IFileStorage\n{\n    public string Name { get; set; } = \"test\";\n\n    public object Get(string fileKey)\n    {\n        return new { provider = \"Amazon\" };\n    }\n\n    public async Task Save()\n    {\n        \/\/save file\n    }\n}\npublic class AzureFileStorage : IFileStorage\n{\n    public string Name { get; set; } = \"test2\";\n\n    public object Get(string fileKey)\n    {\n        return new { provider = \"Azure\" };\n    }\n\n    public async Task Save()\n    {\n        \/\/save file\n    }\n}<\/pre><\/div>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:c# decode:true\">public class FileController(IFileStorage fileStorage,IServiceProvider serviceProvider,IServiceScopeFactory factory) : ControllerBase\n{\n    [HttpGet]\n    public IActionResult Get(string key)\n    {\n        var file = fileStorage.Get(key);\n        fileStorage.Name = \"new name\";\n        var name = GetName();\n        var name2 = GetName2();\n        return Ok(file);\n    }\n    private string GetName()\n    {\n        using var scope = factory.CreateScope();\n        var fileStorage = scope.ServiceProvider.GetRequiredService&lt;IFileStorage&gt;();\n        return fileStorage.Name;\n    }\n    private string GetName2()\n    {\n        var fileStorage = serviceProvider.GetRequiredService&lt;IFileStorage&gt;();\n        return fileStorage.Name;\n    }\n}<\/pre><\/div>\n\n\n\n<p><strong>AddScoped ile ba\u011flayal\u0131m<\/strong><\/p>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:c# decode:true\">builder.Services.AddScoped&lt;IFileStorage,AmazonFileStorage&gt;();<\/pre><\/div>\n\n\n\n<p class=\" translation-block\">.Net create a scope when first request is called. In this case creating FileStorage instance. This instance uses until the request is end.\n<br><strong>GetName()<\/strong> returns assigned value <br>. br&gt;<strong>GetName2()<\/strong> returns returns old value.<br><br><strong>AddTransient<\/strong><\/p>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:c# decode:true\">builder.Services.AddTransient&lt;IFileStorage,AmazonFileStorage&gt;();<\/pre><\/div>\n\n\n\n<p class=\" translation-block\">A new instance is created with each service (FileStorage) call. We see return old values of both <strong>GetName()<\/strong> ve <strong>GetName2()<\/strong>  when we'll test above the code .<\/p>\n\n\n\n<p><strong>AddSingleton<\/strong><\/p>\n\n\n\n<p>Singleton uygulama aya\u011fa kalkt\u0131\u011f\u0131nda s\u0131n\u0131f\u0131 olu\u015fturur. istek bitse bile bellekte fonksiyon saklan\u0131r.<\/p>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:c# decode:true\">builder.Services.AddSingleton&lt;IFileStorage,AmazonFileStorage&gt;();<\/pre><\/div>\n\n\n\n<p>yeni bir request daha ekleyelim<\/p>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:c# decode:true\">[HttpGet(\"test\")]\npublic IActionResult Get2()\n{\n    return Ok(fileStorage.Name);\n}<\/pre><\/div>\n\n\n\n<p>\u00d6nce new name atamas\u0131 yapan iste\u011fi ger\u00e7ekle\u015ftirelim. Daha sonra da file\/test adresine istek atal\u0131m. Sonu\u00e7 <strong>new name<\/strong> olacakt\u0131r yani g\u00fcncellenmi\u015f de\u011feri g\u00f6sterecektir.<\/p>\n\n\n\n<p><strong>Key ile Dependecy Injection<\/strong><\/p>\n\n\n\n<p>.net 8 ile gelen yeni \u00f6zelliklerdir bir interface&#8217;i birden \u00e7ok s\u0131n\u0131fa ba\u011flama imkan\u0131 sunar. Sadece scope de\u011fil ayn\u0131 \u015fekilde transient ve singleton da kullan\u0131labilir.<\/p>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:c# decode:true\">builder.Services.AddKeyedScoped&lt;IFileStorage,AmazonFileStorage&gt;(\"amazon\");\nbuilder.Services.AddKeyedScoped&lt;IFileStorage, AzureFileStorage&gt;(\"azure\");<\/pre><\/div>\n\n\n\n<p>Kullan\u0131m\u0131:<\/p>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:c# decode:true\">public class FileController(\n    [FromKeyedServices(\"azure\")] IFileStorage azureFileSStorage,\n    [FromKeyedServices(\"amazon\")]IFileStorage amazonFileStorage) : ControllerBase\n{\n    [HttpGet]\n    public IActionResult Get(string key)\n    {\n        var azureName = azureFileSStorage.Name;\n        var amazonName = amazonFileStorage.Name;\n        return Ok(azureName);\n    }\n}<\/pre><\/div>\n\n\n\n<p><strong>FromKeyedServices <\/strong>attribute ile kay\u0131t etti\u011fimiz keyi parametre olarak vererek servisleri \u00e7a\u011f\u0131rabiliriz.<\/p>\n\n\n\n<h2 id=\"scope-transient-ve-singleton-ne-zaman-kullanilmali\"><strong>Scope, Transient ve Singleton ne zaman kullan\u0131lmal\u0131<\/strong>?<\/h2>\n\n\n\n<p>\u00d6rne\u011fin <strong>ef core<\/strong> kulland\u0131\u011f\u0131m\u0131z d\u00fc\u015f\u00fcnelim bir post i\u015flemi ba\u015flatt\u0131k ve <strong>context <\/strong>\u00fczerinden bir veri \u00e7a\u011f\u0131rarak transcation\u0131 ba\u015flatt\u0131k bu <strong>transaction <\/strong>\u00fczerindeki her de\u011fi\u015fiklik context \u00fczerinde saklanacakt\u0131r transaction bitene kadar yani <strong>commit <\/strong>i\u015flemi yap\u0131lana kadar de\u011fi\u015fiklikler \u00fczerinde i\u015flem yapar\u0131z. Context&#8217;i transient olarak kaydetti\u011fimiz durumda ayn\u0131 istek i\u00e7inde farkl\u0131 bir servisde contexti \u00e7a\u011f\u0131rd\u0131\u011f\u0131m\u0131z zaman yeni bir context olu\u015fturacakt\u0131r ve contextleri \u00e7oklayacakt\u0131r. Bu durumda en ideali <strong>scope&#8217;dur<\/strong>.<br>\u0130htiya\u00e7lar\u0131n\u0131za g\u00f6re bu y\u00f6ntemleri se\u00e7ebilirsiniz.<br><br>Ba\u015fka bir g\u00f6nderide g\u00f6r\u00fc\u015fmek \u00fczere esen kal\u0131n \ud83d\ude42<\/p>","protected":false},"excerpt":{"rendered":"<p>IoC (inversion of control) ve dependecy injection inceleye\u011fiz ve  .net 8 ile gelen yeni di \u00f6zelliklerini ve scope, transient, singleton bakaca\u011f\u0131z.<\/p>","protected":false},"author":1,"featured_media":908,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[91,117,17,67],"tags":[118,120,119],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v19.13 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>.Net 8 Ioc, Dependecy Injection ve KeyedServices - Okan Karada\u011f<\/title>\n<meta name=\"description\" content=\"IoC (inversion of control) ve dependecy injection inceleye\u011fiz ve .net 8 ile gelen yeni di \u00f6zelliklerini ve scope, transient, singleton bakaca\u011f\u0131z.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/okankaradag.com\/en\/net-8-0\/net-8-ioc-dependecy-injection-ve-keyedservices\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\".Net 8 Ioc, Dependecy Injection ve KeyedServices - Okan Karada\u011f\" \/>\n<meta property=\"og:description\" content=\"IoC (inversion of control) ve dependecy injection inceleye\u011fiz ve .net 8 ile gelen yeni di \u00f6zelliklerini ve scope, transient, singleton bakaca\u011f\u0131z.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/okankaradag.com\/en\/net-8-0\/net-8-ioc-dependecy-injection-ve-keyedservices\/\" \/>\n<meta property=\"og:site_name\" content=\"Okan Karada\u011f\" \/>\n<meta property=\"article:published_time\" content=\"2024-01-09T19:48:50+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-01-09T20:15:09+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/okankaradag.com\/wp-content\/uploads\/2024\/01\/mars-rover-closeup-ai-generated_406939-10403.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"626\" \/>\n\t<meta property=\"og:image:height\" content=\"417\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Okan Karada\u011f\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Okan Karada\u011f\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/okankaradag.com\/net-8-0\/net-8-ioc-dependecy-injection-ve-keyedservices#article\",\"isPartOf\":{\"@id\":\"https:\/\/okankaradag.com\/net-8-0\/net-8-ioc-dependecy-injection-ve-keyedservices\"},\"author\":{\"name\":\"Okan Karada\u011f\",\"@id\":\"https:\/\/okankaradag.com\/#\/schema\/person\/0196919c5e3b6a496101ded872640d52\"},\"headline\":\".Net 8 Ioc, Dependecy Injection ve KeyedServices\",\"datePublished\":\"2024-01-09T19:48:50+00:00\",\"dateModified\":\"2024-01-09T20:15:09+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/okankaradag.com\/net-8-0\/net-8-ioc-dependecy-injection-ve-keyedservices\"},\"wordCount\":663,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/okankaradag.com\/#\/schema\/person\/0196919c5e3b6a496101ded872640d52\"},\"keywords\":[\"dependecy injection\",\"dotnet\",\"ioc\"],\"articleSection\":[\".Net\",\".Net 8.0\",\"C#\",\"Design Patterns\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/okankaradag.com\/net-8-0\/net-8-ioc-dependecy-injection-ve-keyedservices#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/okankaradag.com\/net-8-0\/net-8-ioc-dependecy-injection-ve-keyedservices\",\"url\":\"https:\/\/okankaradag.com\/net-8-0\/net-8-ioc-dependecy-injection-ve-keyedservices\",\"name\":\".Net 8 Ioc, Dependecy Injection ve KeyedServices - Okan Karada\u011f\",\"isPartOf\":{\"@id\":\"https:\/\/okankaradag.com\/#website\"},\"datePublished\":\"2024-01-09T19:48:50+00:00\",\"dateModified\":\"2024-01-09T20:15:09+00:00\",\"description\":\"IoC (inversion of control) ve dependecy injection inceleye\u011fiz ve .net 8 ile gelen yeni di \u00f6zelliklerini ve scope, transient, singleton bakaca\u011f\u0131z.\",\"breadcrumb\":{\"@id\":\"https:\/\/okankaradag.com\/net-8-0\/net-8-ioc-dependecy-injection-ve-keyedservices#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/okankaradag.com\/net-8-0\/net-8-ioc-dependecy-injection-ve-keyedservices\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/okankaradag.com\/net-8-0\/net-8-ioc-dependecy-injection-ve-keyedservices#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/okankaradag.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\".Net 8 Ioc, Dependecy Injection ve KeyedServices\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/okankaradag.com\/#website\",\"url\":\"https:\/\/okankaradag.com\/\",\"name\":\"Okan Karada\u011f\",\"description\":\"Programlama \u00dczerine\",\"publisher\":{\"@id\":\"https:\/\/okankaradag.com\/#\/schema\/person\/0196919c5e3b6a496101ded872640d52\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/okankaradag.com\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/okankaradag.com\/#\/schema\/person\/0196919c5e3b6a496101ded872640d52\",\"name\":\"Okan Karada\u011f\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/okankaradag.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/ca08a5537d7e304914c37189abedd2a1?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/ca08a5537d7e304914c37189abedd2a1?s=96&d=mm&r=g\",\"caption\":\"Okan Karada\u011f\"},\"logo\":{\"@id\":\"https:\/\/okankaradag.com\/#\/schema\/person\/image\/\"},\"sameAs\":[\"https:\/\/okankaradag.com\"],\"url\":\"https:\/\/okankaradag.com\/en\/author\/admin\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":".Net 8 Ioc, Dependecy Injection ve KeyedServices - Okan Karada\u011f","description":"IoC (inversion of control) ve dependecy injection inceleye\u011fiz ve .net 8 ile gelen yeni di \u00f6zelliklerini ve scope, transient, singleton bakaca\u011f\u0131z.","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:\/\/okankaradag.com\/en\/net-8-0\/net-8-ioc-dependecy-injection-ve-keyedservices\/","og_locale":"en_US","og_type":"article","og_title":".Net 8 Ioc, Dependecy Injection ve KeyedServices - Okan Karada\u011f","og_description":"IoC (inversion of control) ve dependecy injection inceleye\u011fiz ve .net 8 ile gelen yeni di \u00f6zelliklerini ve scope, transient, singleton bakaca\u011f\u0131z.","og_url":"https:\/\/okankaradag.com\/en\/net-8-0\/net-8-ioc-dependecy-injection-ve-keyedservices\/","og_site_name":"Okan Karada\u011f","article_published_time":"2024-01-09T19:48:50+00:00","article_modified_time":"2024-01-09T20:15:09+00:00","og_image":[{"width":626,"height":417,"url":"https:\/\/okankaradag.com\/wp-content\/uploads\/2024\/01\/mars-rover-closeup-ai-generated_406939-10403.jpg","type":"image\/jpeg"}],"author":"Okan Karada\u011f","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Okan Karada\u011f","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/okankaradag.com\/net-8-0\/net-8-ioc-dependecy-injection-ve-keyedservices#article","isPartOf":{"@id":"https:\/\/okankaradag.com\/net-8-0\/net-8-ioc-dependecy-injection-ve-keyedservices"},"author":{"name":"Okan Karada\u011f","@id":"https:\/\/okankaradag.com\/#\/schema\/person\/0196919c5e3b6a496101ded872640d52"},"headline":".Net 8 Ioc, Dependecy Injection ve KeyedServices","datePublished":"2024-01-09T19:48:50+00:00","dateModified":"2024-01-09T20:15:09+00:00","mainEntityOfPage":{"@id":"https:\/\/okankaradag.com\/net-8-0\/net-8-ioc-dependecy-injection-ve-keyedservices"},"wordCount":663,"commentCount":0,"publisher":{"@id":"https:\/\/okankaradag.com\/#\/schema\/person\/0196919c5e3b6a496101ded872640d52"},"keywords":["dependecy injection","dotnet","ioc"],"articleSection":[".Net",".Net 8.0","C#","Design Patterns"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/okankaradag.com\/net-8-0\/net-8-ioc-dependecy-injection-ve-keyedservices#respond"]}]},{"@type":"WebPage","@id":"https:\/\/okankaradag.com\/net-8-0\/net-8-ioc-dependecy-injection-ve-keyedservices","url":"https:\/\/okankaradag.com\/net-8-0\/net-8-ioc-dependecy-injection-ve-keyedservices","name":".Net 8 Ioc, Dependecy Injection ve KeyedServices - Okan Karada\u011f","isPartOf":{"@id":"https:\/\/okankaradag.com\/#website"},"datePublished":"2024-01-09T19:48:50+00:00","dateModified":"2024-01-09T20:15:09+00:00","description":"IoC (inversion of control) ve dependecy injection inceleye\u011fiz ve .net 8 ile gelen yeni di \u00f6zelliklerini ve scope, transient, singleton bakaca\u011f\u0131z.","breadcrumb":{"@id":"https:\/\/okankaradag.com\/net-8-0\/net-8-ioc-dependecy-injection-ve-keyedservices#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/okankaradag.com\/net-8-0\/net-8-ioc-dependecy-injection-ve-keyedservices"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/okankaradag.com\/net-8-0\/net-8-ioc-dependecy-injection-ve-keyedservices#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/okankaradag.com\/"},{"@type":"ListItem","position":2,"name":".Net 8 Ioc, Dependecy Injection ve KeyedServices"}]},{"@type":"WebSite","@id":"https:\/\/okankaradag.com\/#website","url":"https:\/\/okankaradag.com\/","name":"Okan Karada\u011f","description":"Programlama \u00dczerine","publisher":{"@id":"https:\/\/okankaradag.com\/#\/schema\/person\/0196919c5e3b6a496101ded872640d52"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/okankaradag.com\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/okankaradag.com\/#\/schema\/person\/0196919c5e3b6a496101ded872640d52","name":"Okan Karada\u011f","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/okankaradag.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/ca08a5537d7e304914c37189abedd2a1?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/ca08a5537d7e304914c37189abedd2a1?s=96&d=mm&r=g","caption":"Okan Karada\u011f"},"logo":{"@id":"https:\/\/okankaradag.com\/#\/schema\/person\/image\/"},"sameAs":["https:\/\/okankaradag.com"],"url":"https:\/\/okankaradag.com\/en\/author\/admin"}]}},"_links":{"self":[{"href":"https:\/\/okankaradag.com\/en\/wp-json\/wp\/v2\/posts\/899"}],"collection":[{"href":"https:\/\/okankaradag.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/okankaradag.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/okankaradag.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/okankaradag.com\/en\/wp-json\/wp\/v2\/comments?post=899"}],"version-history":[{"count":9,"href":"https:\/\/okankaradag.com\/en\/wp-json\/wp\/v2\/posts\/899\/revisions"}],"predecessor-version":[{"id":910,"href":"https:\/\/okankaradag.com\/en\/wp-json\/wp\/v2\/posts\/899\/revisions\/910"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/okankaradag.com\/en\/wp-json\/wp\/v2\/media\/908"}],"wp:attachment":[{"href":"https:\/\/okankaradag.com\/en\/wp-json\/wp\/v2\/media?parent=899"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/okankaradag.com\/en\/wp-json\/wp\/v2\/categories?post=899"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/okankaradag.com\/en\/wp-json\/wp\/v2\/tags?post=899"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}