﻿
{"id":23995,"date":"2021-12-11T10:05:12","date_gmt":"2021-12-11T10:05:12","guid":{"rendered":"https:\/\/www.gencayyildiz.com\/blog\/?p=23995"},"modified":"2021-12-11T10:05:29","modified_gmt":"2021-12-11T10:05:29","slug":"net-6-webapplicationbuilderi-inceleyelim","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/net-6-webapplicationbuilderi-inceleyelim\/","title":{"rendered":".NET 6 &#8211; WebApplicationBuilder&#8217;\u0131 \u0130nceleyelim"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Merhaba,<\/p>\n<p>Bu i\u00e7eri\u011fimizde .NET 6 ile gelen <em>WebApplicationBuilder<\/em>&#8216;\u0131 teknik olarak inceleyecek ve ayn\u0131 i\u015flevselli\u011fe sahip olan generic <em>Host<\/em> ile aralar\u0131ndaki benzerlikleri de\u011ferlendirece\u011fiz.<\/p>\n<p>Bir \u00f6nceki <a href=\"https:\/\/www.gencayyildiz.com\/blog\/net-6da-yeni-gelen-webapplication-webapplicationbuilderi-eski-generic-host-ile-karsilastirma\/\" rel=\"noopener\" target=\"_blank\">.NET 6\u2019da Yeni Gelen WebApplication\/WebApplicationBuilder\u2019\u0131 Eski Generic Host \u0130le Kar\u015f\u0131la\u015ft\u0131rma<\/a> ba\u015fl\u0131kl\u0131 makalemizden de biliyorsunuz ki, Asp.NET Core uygulamalar\u0131n\u0131 olu\u015fturman\u0131n ve aya\u011fa kald\u0131rman\u0131n yeni yolu <em>WebApplication<\/em> ve <em>WebApplicationBuilder<\/em> nesnelerinden ge\u00e7mektedir. Ayr\u0131ca .NET 6&#8217;da, geleneksel &#8216;Program.cs&#8217; ve &#8216;Startup.cs&#8217; b\u00f6l\u00fcnmesi yerine t\u00fcm bootstrap yap\u0131lanmas\u0131 &#8216;Program.cs&#8217; \u00fczerinde geli\u015ftirilmekte ve <a href=\"https:\/\/www.gencayyildiz.com\/blog\/c-9-0-top-level-statements\/\" rel=\"noopener\" target=\"_blank\">Top-Level Statements<\/a>, Implicit Using vs. gibi \u00e7e\u015fitli g\u00fcncellemeler e\u015fli\u011finde uygulaman\u0131n ba\u015flang\u0131c\u0131 hem zahiren, hem de bat\u0131nen sadele\u015ftirilmi\u015f bulunmaktad\u0131r.<\/p>\n<blockquote><p><em style=\"font-size:12px;\">Yukar\u0131da referans edilen makalemizde <em>WebApplication<\/em> ve <em>WebApplicationBuilder<\/em> t\u00fcrleri hakk\u0131nda yap\u0131land\u0131rmaya dair hasbihalde bulunmu\u015ftuk. Bu i\u00e7eri\u011fimizde ise generic Host ile ayn\u0131 esneklik ve i\u015flevselli\u011fe sahip olan bu nesnelerin daha basit API&#8217;lar\u0131 nas\u0131l sunabildi\u011fini inceleyece\u011fiz.<\/em><\/p><\/blockquote>\n<p>\u015eimdi, her \u015feyden \u00f6nce <em>WebApplicationBuilder<\/em> i\u00e7erisinde tan\u0131ml\u0131 olan &#8216;WebHost<code>builder.WebHost<\/code>&#8216; ve &#8216;Host<code>builder.Host<\/code>&#8216; komutlar\u0131 \u00fczerine konu\u015farak konuya giri\u015f yapal\u0131m.<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/12\/NET-6-WebApplicationBuilderi-Inceleyelim.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/12\/NET-6-WebApplicationBuilderi-Inceleyelim.png\" alt=\".NET 6 - WebApplicationBuilder&#039;\u0131 \u0130nceleyelim\" width=\"507\" height=\"280\" class=\"aligncenter size-full wp-image-23999\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/12\/NET-6-WebApplicationBuilderi-Inceleyelim.png 507w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/12\/NET-6-WebApplicationBuilderi-Inceleyelim-300x166.png 300w\" sizes=\"auto, (max-width: 507px) 100vw, 507px\" \/><\/a>&#8216;WebHost&#8217; ve &#8216;Host&#8217; komutlar\u0131 s\u0131ras\u0131yla &#8216;IWebHostBuilder&#8217; ve &#8216;IHostBuilder&#8217; aray\u00fczlerinden t\u00fcreyen ve bunun yan\u0131nda &#8216;ConfigureWebHostBuilder&#8217; ve &#8216;ConfigureHostBuilder&#8217; t\u00fcrlerinden nesne sa\u011flayan iki property&#8217;dirler. Her ikisi de .NET 6 \u00f6ncesi kullan\u0131lan extension metotlar\u0131 uygulama ad\u0131na \u00e7a\u011f\u0131rabilmek i\u00e7in kullan\u0131l\u0131rlar.<\/p>\n<p>Buna en g\u00fczel \u00f6rnek <a href=\"https:\/\/www.gencayyildiz.com\/blog\/asp-net-core-serilog-ile-veri-loglama-ve-seq-ile-gorsellestirme\/\" rel=\"noopener\" target=\"_blank\">Serilog<\/a> entegrasyonudur;<\/p>\n<div style=\"font-size:13px;\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nbuilder.Host\r\n    .ConfigureLogging(config =&gt; config.ClearProviders())\r\n    .UseSerilog((context, configuration) =&gt;\r\n    {\r\n        configuration\r\n        .WriteTo.Console()\r\n        .WriteTo.File(&quot;log.txt&quot;, rollingInterval: RollingInterval.Infinite)\r\n        .WriteTo.Seq(&quot;http:\/\/localhost:5341\/&quot;);\r\n    });\r\n<\/pre>\n<\/div>\n<p>Yukar\u0131da g\u00f6r\u00fcld\u00fc\u011f\u00fc \u00fczere .NET 6 \u00f6ncesi uygulamalarda kullan\u0131lan servislerin .NET 6&#8217;da kullan\u0131labilmesi i\u00e7in &#8216;IWebHostBuilder&#8217; ya da &#8216;IHostBuilder&#8217; aray\u00fczleri gerekmektedir.<br \/>\n<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/12\/NET-6-WebApplicationBuilderi-Inceleyelim-1.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/12\/NET-6-WebApplicationBuilderi-Inceleyelim-1.png\" alt=\".NET 6 - WebApplicationBuilder&#039;\u0131 \u0130nceleyelim\" width=\"859\" height=\"277\" class=\"aligncenter size-full wp-image-24009\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/12\/NET-6-WebApplicationBuilderi-Inceleyelim-1.png 859w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/12\/NET-6-WebApplicationBuilderi-Inceleyelim-1-300x97.png 300w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/12\/NET-6-WebApplicationBuilderi-Inceleyelim-1-768x248.png 768w\" sizes=\"auto, (max-width: 859px) 100vw, 859px\" \/><\/a><\/p>\n<h5>ConfigureHostBuilder \u0130ncelemesi<\/h5>\n<p><a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/12\/NET-6-WebApplicationBuilderi-Inceleyelim-2.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/12\/NET-6-WebApplicationBuilderi-Inceleyelim-2.png\" alt=\".NET 6 - WebApplicationBuilder&#039;\u0131 \u0130nceleyelim\" width=\"546\" height=\"50\" class=\"aligncenter size-full wp-image-24012\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/12\/NET-6-WebApplicationBuilderi-Inceleyelim-2.png 546w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/12\/NET-6-WebApplicationBuilderi-Inceleyelim-2-300x27.png 300w\" sizes=\"auto, (max-width: 546px) 100vw, 546px\" \/><\/a><em>WebApplicationBuilder<\/em> i\u00e7erisindeki &#8216;Host&#8217; property&#8217;sinin(<code>builder.Host<\/code>) t\u00fcr\u00fc olan <em>ConfigureHostBuilder<\/em> s\u0131n\u0131f\u0131n\u0131n detay\u0131na <a href=\"https:\/\/github.com\/dotnet\/aspnetcore\/blob\/main\/src\/DefaultBuilder\/src\/ConfigureHostBuilder.cs\" rel=\"noopener\" target=\"_blank\">github<\/a> \u00fczerinden g\u00f6z atarsak e\u011fer &#8216;IHostBuilder&#8217; ve &#8216;ISupportsConfigureWebHost&#8217; aray\u00fczlerini uygulad\u0131\u011f\u0131n\u0131 g\u00f6rmekteyiz. &#8216;ISupportsConfigureWebHost&#8217; aray\u00fcz\u00fc <code>IHostBuilder ConfigureWebHost(Action<IWebHostBuilder> configure, Action<WebHostBuilderOptions> configureOptions);<\/code> imzas\u0131na sahip bir metot uygulatt\u0131rmakta ve mevzu bahis s\u0131n\u0131f i\u00e7erisinde ilgili metodun implemente edilmi\u015f hali a\u015fa\u011f\u0131daki gibi tasarlanm\u0131\u015f bulunmaktad\u0131r;<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/12\/NET-6-WebApplicationBuilderi-Inceleyelim-3.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/12\/NET-6-WebApplicationBuilderi-Inceleyelim-3.png\" alt=\".NET 6 - WebApplicationBuilder&#039;\u0131 \u0130nceleyelim\" width=\"923\" height=\"78\" class=\"aligncenter size-full wp-image-24014\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/12\/NET-6-WebApplicationBuilderi-Inceleyelim-3.png 923w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/12\/NET-6-WebApplicationBuilderi-Inceleyelim-3-300x25.png 300w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/12\/NET-6-WebApplicationBuilderi-Inceleyelim-3-768x65.png 768w\" sizes=\"auto, (max-width: 923px) 100vw, 923px\" \/><\/a>G\u00f6r\u00fcld\u00fc\u011f\u00fc \u00fczere &#8216;ConfigureWebHost&#8217; metodu i\u00e7erisinde herhangi bir operasyonel i\u015flem bar\u0131nd\u0131rmamakta ve <code style=\"color:red;\">NotSupportedException<\/code> hatas\u0131n\u0131 f\u0131rlatmaktad\u0131r. \u0130\u015fte bu sebepten dolay\u0131 <em>ConfigureHostBuilder<\/em>&#8216;\u0131 bir host olarak kullanmaktan ziyade .NET 6 \u00f6ncesi servislerin uygulamaya dahil edilmesi i\u00e7in kullan\u0131lmaktad\u0131r.<\/p>\n<p>Burada bilinmesi gereken m\u00fchim nokta \u015fudur ki, <em>WebApplicationBuilder<\/em> i\u00e7erisindeki &#8216;Host&#8217;un &#8216;ConfigureServices&#8217; metodu ile <em>WebApplicationBuilder<\/em>&#8216;\u0131n &#8216;Services(<code>IServiceCollection<\/code>)&#8217; \u00f6zelli\u011fi ayn\u0131 nesne \u00fczerinden i\u015flem g\u00f6rd\u00fc\u011f\u00fcd\u00fcr. Yani her ikisi de ayn\u0131 merkeze sahiptir. Misal olarak, a\u015fa\u011f\u0131daki iki \u00e7al\u0131\u015fma da ortak noktalar \u00fczerinden &#8216;AddCors&#8217; servisini uygulamaya farkl\u0131 yollarla eklemektedirler.<br \/>\n&#8216;Host.ConfigureServices&#8217;;<\/p>\n<div style=\"font-size:13px;\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nbuilder.Host.ConfigureServices(services =&gt;\r\n{\r\n    services.AddCors();\r\n});\r\n<\/pre>\n<\/div>\n<p>&#8216;Services&#8217;;<\/p>\n<div style=\"font-size:13px;\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nbuilder.Services.AddCors();\r\n<\/pre>\n<\/div>\n<p>Yukar\u0131daki \u00f6rneklerden her ikisinin de kullan\u0131labilir oldu\u011funu amma velakin ilkinin elveri\u015fsiz bir yap\u0131ya sahip oldu\u011funu itiraf etmekte bir sak\u0131nca g\u00f6rm\u00fcyorum.<\/p>\n<p><em>ConfigureHostBuilder<\/em>&#8216;\u0131 sayesinde eklenen servisleri uygulamada kullanabilmek i\u00e7in <em>WebApplicationBuilder(<code>builder<\/code>)<\/em> nesnesinin <code style=\"color:purple;\">Build<\/code> edilmesi gerekmektedir. Aksi taktirde eklenen servislere eri\u015fim sa\u011flanamayacakt\u0131r.<\/p>\n<p>Bu durum <em>IServiceCollection(<code>builder.Services<\/code>)<\/em> i\u00e7inde ge\u00e7erlidir. Nihayetinde <code>builder.Services<\/code> \u00fczerinden eklenen servislere de eri\u015febilmek i\u00e7in build i\u015fleminin ger\u00e7ekle\u015ftirilmesi gerekmektedir. Her iki t\u00fcrl\u00fc build i\u015flemi neticesinde <code>WebApplication<\/code> t\u00fcr\u00fcnden bir nesne elde edilmektedir.<\/p>\n<h5>BootstrapHostBuilder<\/h5>\n<p><em>BootstrapHostBuilder<\/em>, <em>WebApplicationBuilder<\/em> taraf\u0131ndan kullan\u0131lan dahili bir <em>IHostBuilder<\/em> uygulamas\u0131d\u0131r. <em>ConfigureHostBuilder<\/em>&#8216;\u0131n aksine <em>BootstrapHostBuilder<\/em> provide edilmi\u015f delegeleri daha sonra tetiklemek i\u00e7in bir koleksiyona eklemektedir.<\/p>\n<h5>WebApplicationBuilder<\/h5>\n<p><em>WebApplicationBuilder<\/em> nesnesi i\u00e7erisinde, kendisini destekleye dahili bir <em>Generic Host<\/em> mevcuttur. B\u00f6ylece bir adaptor mant\u0131\u011f\u0131nda hareket ederek generic host ile ayn\u0131 i\u015flevselli\u011fi g\u00f6stermektedir.<\/p>\n<p>\u0130lgilenenlerin faydalanmas\u0131 dile\u011fiyle&#8230;<br \/>\nSonraki yaz\u0131lar\u0131mda g\u00f6r\u00fc\u015fmek \u00fczere&#8230;<br \/>\n\u0130yi \u00e7al\u0131\u015fmalar&#8230;<\/p>\n<!-- AddThis Advanced Settings generic via filter on the_content --><!-- AddThis Share Buttons generic via filter on the_content -->","protected":false},"excerpt":{"rendered":"<p>Merhaba, Bu i\u00e7eri\u011fimizde .NET 6 ile gelen WebApplicationBuilder&#8216;\u0131 teknik olarak inceleyecek ve ayn\u0131 i\u015flevselli\u011fe sahip olan generic Host ile aralar\u0131ndaki benzerlikleri de\u011ferlendirece\u011fiz. Bir \u00f6nceki .NET 6\u2019da Yeni Gelen WebApplication\/WebApplicationBuilder\u2019\u0131 Eski Generic Host \u0130le Kar\u015f\u0131la\u015ft\u0131rma&#46;&#46;&#46;<!-- AddThis Advanced Settings generic via filter on get_the_excerpt --><!-- AddThis Share Buttons generic via filter on get_the_excerpt --><\/p>\n","protected":false},"author":1,"featured_media":23959,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4446,4443],"tags":[4449,4466,4467,4480,4474,4473,4476,4477,4478,4472,4471,4469,4479,4468,4470],"class_list":["post-23995","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-net-6","category-asp-net-core-6-0","tag-net-6","tag-net-6-webapplication","tag-net-6-webapplicationbuilder","tag-bootstraphostbuilder","tag-builder-host","tag-builder-webhost","tag-configurationhostbuilder-incelemesi","tag-configurehostbuilder","tag-configurehostbuilder-incelemesi","tag-generic-host","tag-host","tag-ihostbuilder","tag-isupportsconfigurewebhost","tag-iwebhostbuilder","tag-webhost"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/23995","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/comments?post=23995"}],"version-history":[{"count":31,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/23995\/revisions"}],"predecessor-version":[{"id":24030,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/23995\/revisions\/24030"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media\/23959"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=23995"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=23995"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=23995"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}