﻿
{"id":10556,"date":"2019-03-15T14:07:50","date_gmt":"2019-03-15T14:07:50","guid":{"rendered":"https:\/\/www.gencayyildiz.com\/blog\/?p=10556"},"modified":"2019-03-15T14:07:50","modified_gmt":"2019-03-15T14:07:50","slug":"net-core-console-applicationda-dependency-injection-kullanimi","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/net-core-console-applicationda-dependency-injection-kullanimi\/","title":{"rendered":".NET Core &#8211; Console Application&#8217;da Dependency Injection Kullan\u0131m\u0131"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Merhaba,<\/p>\n<p>.NET Core; uygulamada olas\u0131 t\u00fcm kodsal ba\u011f\u0131ml\u0131l\u0131klar\u0131 minimize etmek ve biz yaz\u0131l\u0131mc\u0131lar\u0131 bu ba\u011f\u0131ml\u0131l\u0131klardan soyutlayabilmek i\u00e7in Dependency Injection yakla\u015f\u0131m\u0131n\u0131 benimsemi\u015f bir mimaridir. Mecram\u0131zdaki bir\u00e7ok makale ve i\u00e7erikte ilgili mimari ve yakla\u015f\u0131m \u00fczerine yeterince izahatte bulundu\u011fumuzu ve yer yer siz de\u011ferli okuyucular\u0131m\u0131zla da isti\u015fare etti\u011fimizi d\u00fc\u015f\u00fcnd\u00fc\u011f\u00fcmden dolay\u0131 konuyu direkt olarak as\u0131l olmas\u0131 gereken noktaya odaklayarak <em>.NET Core &#8211; Console Application<\/em> uygulamalar\u0131nda da bu nimetten nas\u0131l faydalanabilece\u011fimizi konu\u015faca\u011f\u0131m\u0131z\u0131 bildirmek isterim.<\/p>\n<p>Her ne kadar Console Application uygulamalar\u0131nda Dependency Injection uygulamaya \u00e7al\u0131\u015facak olsakta, \u00e7ekirdek olarak .NET Core mimarisini kullanaca\u011f\u0131m\u0131zdan dolay\u0131 ilgili i\u015fi ger\u00e7ekle\u015ftirebilmek i\u00e7in ilk olarak Core&#8217;un baz\u0131 \u00f6zelliklerini tekrar masaya yat\u0131rmam\u0131z gerekmektedir.<\/p>\n<p>.NET Core mimarisi, yap\u0131s\u0131 gere\u011fi service sa\u011flay\u0131c\u0131s\u0131 bar\u0131nd\u0131rmakta ve bu sa\u011flay\u0131c\u0131 sayesinde talep bulunulan nesneleri bizlere Dependency Injection dedi\u011fimiz y\u00f6ntemle iletebilmektedir. Dolay\u0131s\u0131yla Console Application uygulamalar\u0131nda .NET Core mimarisinin service sa\u011flay\u0131c\u0131s\u0131na eri\u015febilmeli ve oraya istedi\u011fimiz tan\u0131mlamalar\u0131 yapabilmeliyiz.<\/p>\n<p>Bu i\u015flem i\u00e7in ilk olarak <em>Solution Explorer<\/em> penceresinden projeye sa\u011f t\u0131klayarak &#8220;Edit [ProjeAd\u0131].csproj&#8221; sekmesine t\u0131klay\u0131n\u0131z ve a\u00e7\u0131lan pencerede a\u015fa\u011f\u0131daki gibi <em style=\"color: green;\">Microsoft.AspNetCore.App<\/em> k\u00fct\u00fcphanesini projeye Include ediniz.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n&lt;Project Sdk=&quot;Microsoft.NET.Sdk&quot;&gt;\r\n  &lt;PropertyGroup&gt;\r\n    &lt;OutputType&gt;Exe&lt;\/OutputType&gt;\r\n    &lt;TargetFramework&gt;netcoreapp2.2&lt;\/TargetFramework&gt;\r\n  &lt;\/PropertyGroup&gt;\r\n\r\n  &lt;ItemGroup&gt;\r\n    &lt;PackageReference Include=&quot;Microsoft.AspNetCore.App&quot; \/&gt;\r\n  &lt;\/ItemGroup&gt;\r\n&lt;\/Project&gt;\r\n<\/pre>\n<p>Yukar\u0131daki paketi uygulamaya dahil etti\u011fimiz taktirde servis sa\u011flay\u0131c\u0131s\u0131na bizleri eri\u015ftirecek olan &#8220;<em style=\"color: green;\">Microsoft.Extensions.DependencyInjection<\/em>&#8221; k\u00fct\u00fcphanesi kullan\u0131labilir olacakt\u0131r.<\/p>\n<p>\u015eimdi servis sa\u011flay\u0131c\u0131s\u0131n\u0131 kullanabilmek i\u00e7in a\u015fa\u011f\u0131daki \u00f6rnek s\u0131n\u0131flar\u0131m\u0131z\u0131 olu\u015fturuyoruz.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    interface IConnection\r\n    {\r\n        bool Connection { get; set; }\r\n        string ConnectionString { get; set; }\r\n    }\r\n    class SqlConnection : IConnection\r\n    {\r\n        public bool Connection { get; set; }\r\n        public string ConnectionString { get; set; }\r\n    }\r\n<\/pre>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    interface ICommand\r\n    {\r\n        string Command { get; set; }\r\n        void Execute(string command);\r\n        void Execute();\r\n    }\r\n    class SqlCommand : ICommand\r\n    {\r\n        public string Command { get; set; }\r\n\r\n        public void Execute(string command)\r\n        {\r\n            Command = command;\r\n            \/\/.\r\n            \/\/Processing\r\n            \/\/.\r\n        }\r\n\r\n        public void Execute()\r\n        {\r\n            \/\/.\r\n            \/\/Processing\r\n            \/\/.\r\n        }\r\n    }\r\n<\/pre>\n<p>Ard\u0131ndan hangi interface tipinde talep geldi\u011finde hangi nesneyi d\u00f6nece\u011finin bilgisini a\u015fa\u011f\u0131daki gibi servis sa\u011flay\u0131c\u0131m\u0131za veriyoruz.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    class Program\r\n    {\r\n        static void Main(string&#x5B;] args)\r\n        {\r\n            ServiceProvider serviceProvider = new ServiceCollection()\r\n                                               .AddTransient&lt;IConnection, SqlConnection&gt;()\r\n                                               .AddTransient&lt;ICommand, SqlCommand&gt;()\r\n                                               .BuildServiceProvider();\r\n\r\n\r\n            IConnection connection = serviceProvider.GetService&lt;IConnection&gt;();\r\n            ICommand command = serviceProvider.GetService&lt;ICommand&gt;();\r\n\r\n            Console.WriteLine(connection.GetType());\r\n            Console.WriteLine(command.GetType());\r\n            Console.Read();\r\n        }\r\n    }\r\n<\/pre>\n<p>Yukar\u0131daki kod blo\u011funu incelerseniz e\u011fer; &#8220;ServiceCollection&#8221; koleksiyonunda verdi\u011fimiz t\u00fcm nesneler tutulmakta ve bunlar &#8220;BuildServiceProvider&#8221; metodu sayesinde servis sa\u011flay\u0131c\u0131s\u0131na at\u0131lmaktad\u0131rlar. Dolay\u0131s\u0131yla art\u0131k &#8220;ServiceProvider&#8221; tipindeki nesnemiz ilgili s\u0131n\u0131flar\u0131 verildi\u011fi metodun i\u015flevine g\u00f6re<span style=\"font-size:9px; color:green;\">(<a href=\"https:\/\/www.gencayyildiz.com\/blog\/asp-net-core-2-mvcde-dependency-injection\/\" rel=\"noopener noreferrer\" target=\"_blank\">buradaki<\/a> makalede t\u00fcm metotlar\u0131 ve i\u015flevleri inceleyebilirsiniz)<\/span> tutmakta ve talep geldi\u011finde ilgili s\u0131n\u0131flardan nesneler d\u00f6nd\u00fcrmektedir.<\/p>\n<p>Nesne talebinide yine yukar\u0131da 10 ve 11. sat\u0131rlardaki komutlarda inceleyebilirsiniz. Provider \u00fczerinden generic &#8220;GetService&#8221; fonksiyonu sayesinde talep edilen tipe uygun nesne g\u00f6nderilmektedir. Haliyle 14 ve 15. sat\u0131rlarda bunun \u0131spat\u0131da ger\u00e7ekle\u015ftirilmektedir.<\/p>\n<p>\u0130\u015fte g\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi&#8230;<br \/>\n.NET Core &#8211; Console uygulamalar\u0131nda Dependency Injection kullanarak \u00e7al\u0131\u015fmalar\u0131n\u0131z\u0131 ger\u00e7ekle\u015ftirmek istiyorsan\u0131z burada anlat\u0131ld\u0131\u011f\u0131 gibi \u00e7al\u0131\u015fma yapman\u0131z sizin i\u00e7in olduk\u00e7a yeterli olacakt\u0131r.<\/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, .NET Core; uygulamada olas\u0131 t\u00fcm kodsal ba\u011f\u0131ml\u0131l\u0131klar\u0131 minimize etmek ve biz yaz\u0131l\u0131mc\u0131lar\u0131 bu ba\u011f\u0131ml\u0131l\u0131klardan soyutlayabilmek i\u00e7in Dependency Injection yakla\u015f\u0131m\u0131n\u0131 benimsemi\u015f bir mimaridir. Mecram\u0131zdaki bir\u00e7ok makale ve i\u00e7erikte ilgili mimari ve yakla\u015f\u0131m \u00fczerine yeterince&#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":10242,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2739],"tags":[2784,1216,2782,2783,2780,2781],"class_list":["post-10556","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-net-core","tag-net-core-console-application","tag-console-application","tag-console-application-dependency-injection","tag-console-application-di","tag-microsoft-aspnetcore-app","tag-microsoft-extensions-dependencyinjection"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/10556","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=10556"}],"version-history":[{"count":19,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/10556\/revisions"}],"predecessor-version":[{"id":10575,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/10556\/revisions\/10575"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media\/10242"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=10556"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=10556"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=10556"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}