Asp.Net Core

Asp.Net Core

Net Core Microsoft tarafından açık kaynak kodlu (open-source) olarak geliştirilen. Cross platform (windows, macos, linux işletim sistemlerinde çalışabilen) olarak çalışan, esnek ve modern geliştirme platformudur. .Net Core ile beraber yazılımcılar dilerse macos, linux veya android platformlarına uygulamalarını yazabileceklerdir

  • Açık kaynak kodlu ve modern bir geliştirme platformudur.

  • Cross Platform olarak bilinen çapraz geliştirme platformudur.

  • Yeni bir çatı platform olmasına karşın içerisinde başlıca C# programlama dili ile geliştirilmektedir. F# ve Visual Basic ile de geliştirilme yapılabileceği Microsoft .Net Core topluluk web sayfasında belirtiliyor olsa da geliştiricilerin çoğu C# dilini tercih etmektedirler.

  • Container desteği bulunması sebebiyle başlıca docker ve diğer container servislerini desteklemektedir.

  • Github için kodların açık bir şekilde yayınlanabilir.

  • Tarayıcı sunucu iletişiminde System.dll dosyasına bağımlılığı olmadığından hızlıdır.

  • Modern UI yapılarıyla uyumlu olduğundan AngularJS, ReactJS, Bootstrap gibi UI yapılar kolaylıkla kullanılabilir ve yönetilebilir.

  • Platform bağımsızlığı sebebiyle sadece IIS web sunucusuna ihtiyaç duymaz IIS veya Apache gibi farklı sunucularda çalışır.

  • Performans; .Net Core ile gelen en büyük özelliklerden biri de, önceki .net sürümlerine göre ciddi performans artışı.

Asp.Net Core hem Dependency Injection destekler hem de bunun için herhangi bir ek uygulamaya ihtiyaç duymaz. Buda kullanıcıları için oldukça büyük bir verimlilik oluşturur.

.Net Core DIP'e uyumak için baştan dizayn edilmiştir. Peki nedir bu DIP prensibi ve bu prensibe nasıl uyulur?

Inversion of Control bir yazılım tasarım ve Dependencey Inversion Princible Solip prensibidir. Temelde bu 2 prensibin amacı bağımlılıkları en aza indirmek üzerinde kuruludur (SOLID prensipleri kısmından ayrıntılarına ulaşabilirisiniz). Dependencey Injection DI bu prensiplerin uygulanmasına aracı olan bir patterndır. Ki bu pattern Constructor Injection, Property Injection ve Method Injection olmak üzere 3 yöntemle uygulanır. IOC container ise bu uygulamaların projede hayata geçiren bir frameworktur.

Asp.Net Core inject üzerine kurulmuştur. Proje içerisindeki birbirine bağlantılı sınıflarda yapılan injectler IOC coteynera register edilmek amacıyla Startup.cs içerisindeki ConfigureServise() methodunda belirtilmesi gerekir. Asp.net corun içerisinde DI'yı uygalamak için gömülü olarak bulunan Built-in IOC Conteyner görevi tamamıyla bağımlılıkları tersine çevirmek ve bağımlılıkları kontrol altına almaktır.

.NetCore birbirine bağımlı olan sınıfları servis olarak değerlendiriyor ve IOC conteynıra register etmek için Start up classı içerisinde bulunan Configure servise methoduna eklememizi istiyor. ve artık bağımlı olan sınıfları newlemek yerine consturactor methodla inject ederek Dependencey Injection pattern'nına uymulmuş oluyor.

Built-in IOC conteyner nasıl çalışır?

Gömülü olarak bulunan ıoc conteynır yukarıda bahsedildiği üzere bağımlılıkları kontrol altına alınma işlevi görür. Ve yaşam sürelerini belirten 3 paremetre vardır. Bunlar singleton scopped transientdır.

Singelton ; IOC konteyneri uygulamanın ömrü boyunca bir hizmetin tek bir örneğini oluşturacak ve paylaşacaktır. İlk istek için yaratılır ve uygulama boyunca tüm istek tarafından kullanılabilir. Bir türü singleton olarak kaydettiğimizde, uygulama genelinde ve her istek için yalnızca bir örnek kullanılabilir. Static bir nesneye sahip olamaya benzer. Uygulama başında yanlızca bir kez Singleton hizmeti oluşturulur ve bu tek örnek uygulama ömrü boyunca kullanılır.

Scoped; her request için bir tane instance üretilir. Request sonlandırıldığında otomatik olarak dispose edilir. Bir türü scopped olarak keydettiğimizde uygulama boyunca istek başına bir örnek olarak kullanılabilir. Yeni bir istek geldiğinde yeni örnek oluşturulur. Kullanıcı başına farklı davranışa sahip uygulamalar için kullanılır. Uygulamaların yoğun kullanılan servisleri için kullanılması uygun olacaktır.

Transient; Her request için her seferinde farklı instance alınır . Requeat sonlandığında dispose edilir, hafif hizmetler için kullanılır. Bir türü transient olarak keydettiğimizde her seferinde yeni örnek oluşturulur. transient her hizmet/derleyici, her istek ve her her kullanıcı için yeni bir örnek oluşturur. Uygulamaların az kullanılan kısımlarında kullanılması mantıklı olacaktır.

Built-in IOC Container Service LifeTime

Örnek; twiter projesindenden örnek vermek gerekirse login olma işlemi transient time ile yönetilir. Twit atma servisi ise Scoped ile yönetilir. bu örnekle tam olarak bu iki parametrenin kullanımı anlaşılmıştır.

Her ikisinin de ortak yanı request sonlandığında dispose edilmesidir ve her request için oluşturulmasıdır.

ninject, outofect, unity ;

Startup.cs de neler bulunur?

Aşağıda gösterilen kendi projemdeki Startup.cs dir.

ConfigureServise() methodu; Bağımlı sınflarımızı Built-in IOC conteiner (yerleşik ) yardımıyla kaydedebileceğiniz bir yerdir. Bağımlı sınıfı ConfigureServise() methoduna kaydettikten sonra uygulamanın herhangi bir yerinde kullanılabilir. Bunu kullanmak istediğimiz bir sınıfının constructor methoduna parametre olarak eklemeniz yeterlidir. IOC conteyner onu otomotik olarak inject eder.

Configure Methodu; Http requestlerini karşılayan ve neler yapılacağını belirtilen methodtur. Bunları içerisinde bulunan methodlar yardımıyla yerine getirir.

EndPoints, gelen HTTP isteklerini karşılan configure methodun içerisinde bulunan ve bu istekleri eşleştirmekten ve bu istekleri uygulamanın yürütülebilir uç noktalarına gönderen sorumludur. EndPoints (Uç noktalar) , uygulamanın yürütülebilir istek işleme kodu birimleridir. Uç noktalar uygulamada tanımlanır ve uygulama başlatıldığında yapılandırılır. Uç nokta eşleştirme işlemi, isteğin URL 'sindeki değerleri çıkarabilir ve bu değerleri istek işleme için sağlayabilir. Uygulamanın uç nokta bilgilerini kullanarak, yönlendirme, uç noktalarıyla eşlenen URL 'ler de oluşturabilir. endpoints'den önce useMVc kullanılıyordu.

Last updated