• Buradasın

    ASP.NET Core'da Dependency Injection ve IOC Eğitimi

    youtube.com/watch?v=Bhj2XdcoT2Q

    Yapay zekadan makale özeti

    • Bu video, bir eğitmen tarafından sunulan teknik bir eğitim dersidir. Eğitmen, ASP.NET Core mimarisi kapsamında Dependency Injection (Bağımlılık Ekleme) tasarım deseni ve IOC (Inversion of Control) yapısını detaylı şekilde anlatmaktadır.
    • Video, Dependency Injection ve IOC'nin teorik anlamlarını açıklayarak başlayıp, ASP.NET Core'da bu yapıların nasıl kullanıldığını incelemektedir. Eğitmen, bağımlılık kavramını günlük hayattan örneklerle açıklamakta, Singleton, Transient ve Scope gibi yaşam süreleri hakkında bilgi vermektedir ve Service Collection aracılığıyla IOC mekanizmasının nasıl kullanılacağını adım adım göstermektedir.
    • Eğitim içeriğinde ayrıca, new operatörü yerine parametrelerden nesne alma yönteminin avantajları, arayüzlerin Dependency Injection'da kullanımı, controller bazlı ve action bazlı dependency injection uygulamaları ve view dosyalarında inject işlemi yapma gibi pratik konular ele alınmaktadır. Video, izleyicilerden yorum ve katkılar için bir davetiye ile sona ermektedir.
    00:01Dersin Amacı ve Temel Kavramlar
    • Bu derste ASP.NET Core mimarisi çerçevesinde Dependency Injection tasarım deseni ve daha etkili kullanmamızı sağlayan IOC (Inversion of Control) yapısı incelenecek.
    • Ders, ASP.NET Core dahili gelen IOC yapısını inceleyecek ve bu yapıyı kullanırken dikkat edilmesi gereken noktaları ve yönetimi ele alacak.
    • Dependency Injection ve IOC, farklı tasarım desenleri (stratejik yapılar) olduğu için bu ders teorik olarak bu konuları aktaracak, pratik uygulamaları ayrı bir derste ele alınacak.
    02:13Kavramların Doğru Anlaşılması
    • Dependency Injection, ASP.NET Core ile birlikte gelen bir özellik değil, bir tasarım desenidir (strateji, mantık).
    • IOC yapısı, belirli kütüphaneler dışında farklı platformlarda da kullanılabiliyor ve ASP.NET Core dahilinde uygulanabilir.
    • Dependency Injection ve IOC arasındaki fark önemlidir: ASP.NET Core'da kullanılan Services yapısındaki fonksiyonlar (Scope, Singleton) IOC fonksiyonlarıdır, Dependency Injection fonksiyonları değildir.
    04:30Dependency Injection ve Dependency Inversion
    • Dependency Injection, SOLID prensiplerindeki Dependency Inversion prensibinin somut uygulanmasıdır.
    • Dependency Inversion, "bağımlılıkları ters çevir" prensibidir ve Dependency Injection bu prensibi pratikte uygulayan tasarım desenidir.
    • Dependency Injection, bağımlılıkların tersine dönüşebilmesi için yapılması gereken bir tasarım desenidir.
    06:22Bağımlılık Kavramı
    • Programlama dilinde kodlar sınıfların içerisindeki metotlarda, propertilerde veya indekslerde yazılır.
    • Dependency Injection, herhangi bir sınıfta başka bir sınıfın nesnesine ihtiyaç duyulduğunda new operatörü ile nesne oluşturmanın yerine alternatif bir yaklaşımdır.
    • Bir sınıfın başka bir sınıfın nesnesini new operatörü ile oluşturması, o sınıfa bağımlılık oluşturur.
    08:22Bağımlılık ve Dependency Injection
    • Bağımlılık, bir sınıfın başka bir sınıfa olan bağımlılığını enjekte etmek ve bu bağımlılığı soyutlamaktır.
    • Bir sınıfın başka bir sınıfa bağımlı olması, beynin üzerinde yapılan tüm değişikliklerin bu bağımlılığı etkileyeceğini gösterir.
    • Bağımlılığı soyutlamak için dependency injection kullanılır, bu sayede A sınıfı B sınıfına olan bağımlılığını enjekte ederek soyutlar.
    10:39Bağımlılık Sorunları
    • Bir sınıfın başka bir sınıfa bağımlı olması, ihtiyaç değiştiğinde kaynak kodun da değişmesi gerektiği anlamına gelir.
    • Bağımlılık durumlarında en bariz göstergesi, ihtiyaç değiştiğinde (B'den C'ye) kaynak kodun değiştirilmesidir.
    • Bu tür programlama çok efektif değildir, çünkü her ihtiyaç değiştiğinde kodun değiştirilmesi gerekir.
    12:39Dependency Injection Çözümü
    • Dependency injection, bağımlılıkları dışarıdan enjekte ederek ortadan kaldırmayı amaçlar.
    • Sınıfların ortak bir atasını (örneğin IClass arayüzü) kullanarak, farklı sınıfları dışarıdan enjekte edebiliriz.
    • Bu sayede davranış değiştiğinde (B'den C'ye) kodu değiştirmek yerine, dışarıdan enjekte edilen nesneyi değiştirmek yeterlidir.
    15:13Dependency Injection Kavramı
    • Dependency injection, bir sınıfın başka bir sınıfı new operatörü ile oluşturmak yerine dışarıdan almasını sağlayan bir tasarım desenidir.
    • Bu tasarım deseni, farklı dizen pattern'lerin temelinde kullanılır ve bilinmesi gereken önemli bir kavramdır.
    • Dependency injection, sistemde yeni özellikler eklemek için kodu değiştirmek yerine, özelliklerin dışarıdan enjekte edilebilmesini sağlar.
    18:13Dependency Injection Kavramı
    • Bağımlılık, tek bir sigaraya bağımlılık değil, sigara bağımlılığı olmalıdır; dependency injection ise herhangi bir sigara ihtiyacını giderebilme prensibidir.
    • Dependency injection, sınıf içinde ihtiyaç olan nesnenin constructor'dan veya setter metoduyla parametre olarak alınması gerektiği dizayn patternidir.
    • Dependency injection, bağımlılıkları soyutlamayı ama koparmayı değil amaçlar; örneğin sigara bağımlısı olmak durumunda, belirli bir markaya değil sigaraya bağımlı olmak daha esnek bir durumdur.
    20:25Inversion of Control (IoC) Kavramı
    • IoC, sınıfların bağımlılığını azaltmak için bağımlılıkları dependency injection ile dışarıdan alabilmeyi sağlar.
    • Bir sınıf birden fazla arayüze veya başka sınıflara ihtiyaç duyduğunda, bu bağımlılıkları ayrı ayrı referans vermek yerine konteynirlere vererek kod karmaşasını önleriz.
    • Kontrolün ters çevrilmesi, bağımlılığı olan sınıfın (örneğin A sınıfı) bağımlılığı olan sınıfları (B sınıfı) kendisi oluşturmak yerine dışarıdan almasıdır.
    26:52IoC Çalışma Mantığı
    • IoC, bağımlılıkları konteyner dediğimiz bir yapıda tutar ve ihtiyaç doğrultusunda bu değerler çağrılır.
    • Konteyner, bir dictionary koleksiyonu gibi çalışır ve tüm sınıfların örnekleri burada tutulur.
    • Dependency injection kullanılarak enjekte edilecek tüm değerler IoC konteynerinde tutulur ve ihtiyaç doğrultusunda bu değerler çağrılır.
    28:53ASP.NET Core ve IOC Mimarisi
    • Teorik konu bittiğinde, ASP.NET Core'nin kendi içinde IOC (Inversion of Control) yapılanmasıyla gelen mimariye sahip olduğu belirtiliyor.
    • .NET uygulamalarında IOC yapılanmasını sağlayan StructureMap, Autofac ve Ninject gibi frameworkler mevcuttur.
    • ASP.NET Core kendi bünyesinde dahili olarak IOC konteyner barındırmaktadır.
    29:49IOC Konteynerin Üç Farklı Davranışı
    • IOC konteyner içerisine koyulacak değerler ve nesneler üç farklı davranışla alınabilmektedir: Singleton, Scope ve Transient.
    • Singleton, uygulama bazlı tek nesne oluşturan ve tüm taleplerde bu nesneyi döndüren bir davranıştır.
    • Scope, her request başına bir nesne üreten ve o request içindeki tüm isteklere aynı nesneyi gönderen bir davranıştır.
    • Transient, her requestin her talebine karşılık kesinlikle bir tane nesne üreten ve gönderen, en maliyetli davranıştır.
    34:40IOC Mimarisi ve Dependency Injection
    • IOC yapılanmasının Dependency Injection (bağımlılık enjeksiyonu) sağladığı ve kontrolü tersine dönüştürdüğü belirtilmektedir.
    • ASP.NET Core üzerinde bu mimariyi nasıl kullanabileceğimiz ve hangi kriterlerle bunu yapmamız gerektiğini ele alacağız.
    35:31Pratik Örnek: Servis Yapılama
    • Web uygulamalarında genellikle servis yapılanmaları kullanılır ve belirli operasyonları gerçekleştirmek için servis sınıfları oluşturulur.
    • Örneğin, konsol tabanlı ve text tabanlı loglama işlemlerini gerçekleştirecek iki farklı servis sınıfı oluşturulabilir.
    • Controller'da bu servislere new operatörü ile erişim sağlarsak bağımlılık yaratmış oluruz ve bu durum değişikliklerde kaynak kodunu değiştirmemizi gerektirebilir.
    • Bu bağımlılığı soyutlamak için Dependency Injection kullanmak gerekir.
    39:28Dependency Injection ve IOC Yapısı
    • Dependency Injection uygulamak için IOC (Inversion of Control) yapısını kullanmak gerekiyor, bu sayede bağımlılıkları soyutlayabilir ve kontrolü tersine dönüştürebilirsiniz.
    • IOC yapısını kullanarak hangi servisi kullanmak istediğinizi belirleyebilir ve sistem o servise göre işlem gerçekleştirebilir.
    • IOC yapısını kullanmak için hazır kütüphaneler kullanılabilir veya dahili IOC yapısını kullanabilirsiniz.
    40:28Service Collection ve IOC Konteynırı
    • Servisleri sisteme dahil etmek için Startup'taki ConfigureServices fonksiyonu kullanılır ve ServiceCollection parametresi üzerinden mimariye dahil edilir.
    • ServiceCollection türü, IOC yapısını barındıran bir konteynır türüdür ve Microsoft.Extensions.DependencyInjection namespace'inden gelir.
    • ServiceCollection üzerinden konteynere servisler eklenir, bu da ilgili servisin sınıflarının mimarinin konteynırına eklenmesi anlamına gelir.
    43:12Servisleri Konteynere Eklemek
    • Kendi özel servislerinizi eklemek için Add fonksiyonu kullanılabilir.
    • Add fonksiyonu, ServiceDescriptor nesnesi isteyerek konteynere tür ve nesne bilgilerini ekler.
    • ServiceDescriptor nesnesi, TypeOf ile tür belirtilir ve ardından nesne instance'ı eklenir, ayrıca propertilerin ilk değerleri de burada belirlenebilir.
    45:30Konteynirden Servisleri Çekmek
    • Konteynere eklenen değerleri elde etmek için ServiceCollection'ın BuildServiceProvider fonksiyonu kullanılır.
    • BuildServiceProvider fonksiyonu, ServiceProvider türünde bir sağlayıcı nesnesi döndürür.
    • ServiceProvider üzerinden GetService fonksiyonu kullanılarak, konteynere eklenen nesnelerin türüne göre nesneler çekilebilir.
    48:27IOC Yapısının Davranışları
    • Add fonksiyonuyla eklenen servisler default olarak singleton davranış sergiler.
    • Servisin davranışını değiştirmek için ServiceDescriptor nesnesinin ServiceLifetime parametresi kullanılır.
    • ServiceLifetime parametresi, singleton, scoped veya transient gibi farklı davranış seçenekleri sunar.
    49:42Dependency Injection ve IOC Mekanizması
    • IOC (Inversion of Control) mekanizması arayüzlerle kullanılır, önce arayüzü, sonra istenen nesneyi bildirmek gerekir.
    • Singleton, Transient ve Scope gibi davranışlar konteynerde nesnelerin nasıl ekleneceği ve kullanılacağına dair farklı yaklaşımlardır.
    • Service Descriptor üzerinden Service Lifetime türünden parametre ile hangi davranışı sergileyeceğini belirtebilirsiniz.
    51:51Singleton, Transient ve Scope Kullanımı
    • AddSingleton, tüm isteklerde aynı nesneyi kullanıp gönderir, tek bir nesne üretip onu gönderir.
    • Eğer sınıfın constructor'ı parametre alıyorsa, AddSingleton veya AddScope kullanamazsınız, hata alırsınız.
    • Parametre alan sınıfları eklemek için provider fonksiyonu kullanarak manuel olarak nesne oluşturabilirsiniz.
    54:40Transient ve Scope Farkları
    • AddTransient, her istekte ayrı bir nesne oluşturup gönderir.
    • AddScope, her isteğin her talebine talebe özel nesne üretip gönderir.
    • IOC yapılanmasında aynı işi yapan servisleri ortak bir arayüz altında toplarız, böylece dışarıdan enjekte edebiliriz.
    57:12Arayüz Kullanımı
    • IOC yapılanmasında konteynera vereceğimiz nesneleri bir ortak arayüze tabi tutarız.
    • Örneğin, ConsoleLock ve TextLock sınıflarını bir ILog arayüzü altında toplayabiliriz.
    • Arayüz üzerinden sisteme dahil ederek, talep ederken hangi türde talep edileceği belirlenebilir.
    58:38IOC Konteyner ve Polimorfizm
    • IOC konteynerinden ilock türünden nesne talep edildiğinde, polimorfizm kuralları ve object orantı kuralları geçerli olur.
    • Bağımlılık tersine döndürülebilir, örneğin "text" yazarak tüm loklama mekanizmasının textte loklama yapmasını sağlayabilirsiniz.
    • IOC konteyneri, tekerden yönetme mekanizması sunarak davranış sergilemesini sağlar.
    59:42IOC Konteyner Parametreleri
    • IOC konteynerinde "s-scope" kullanarak hangi arayüzden ve nesnenin olacağını belirtebilirsiniz.
    • Parametre, ilo'dan türemiş olmalı ve nesne üretilebilir kontratları default olan boş parametreli bir nesne olmalıdır.
    • Eğer belirtilen nesne ilo'dan türemiyorsa veya nesne oluşturulabilir değilse, derleyici hatası verir.
    1:01:15Controller'larda Dependency Injection
    • Controller'larda IOC konteynerındaki nesneleri talep etmek için controller kontratları üzerinden erişilebilir.
    • Dependency injection, constructor, setter propertiler veya action bazlı olarak gerçekleştirilebilir.
    • Controller kontratöründe IOC konteynerdan ilock türündeki nesne talep edilebilir ve global bir property olarak kullanılabilir.
    1:03:31IOC Kullanımı Örneği
    • Startup'ta scope olarak ilock için text logo eklenmiş, böylece ilock çağrıldığında text nesnesi gönderilecektir.
    • Controller'da indeks tetiklendiğinde konteynerdan text lock nesnesi talep edilir ve konsola "text dosyasına loklama işlemi gerçekleştirilmiştir" çıktısı verilir.
    • İhtiyaca göre "text" yerine "konsol" yazarak farklı davranış sağlanabilir.
    1:06:32Farklı Seviyelerde Dependency Injection
    • Action bazlı talep için, beklenen nesneye dair parametrede "from services" işaretlenmiş bir parametre kullanılmalıdır.
    • View dosyalarında da dependency injection yapılabilir, bunun için "inject" keyword'ü kullanılır.
    • View'da "inject" kullanarak konteynerdan nesne talep edilebilir ve istenen operasyon gerçekleştirilebilir.
    1:08:37Kapanış
    • ASP.NET Core'da dependency injection ve IOC mekanizmasının kullanımı incelenmiştir.
    • Videoda bilinmeyen noktalara temas edilmeye çalışılmıştır.
    • İzleyicilerden yorumlarda istişare edilmesi ve yeni fikirlerin paylaşılması istenmiştir.

    Yanıtı değerlendir

  • Yazeka sinir ağı makaleleri veya videoları özetliyor