Kayıt Ol

Gönderilerinizi yayınlamak, insanların sorularını yanıtlamak ve diğer insanlarla bağlantı kurmak için Yazılım Köyü'ne kaydolun.

Hesabın var mı? Giriş Yap
  • Google ile devam et
  • Linkedin ile devam et
  • GitHub ile devam et
ya da

Hesabın var mı? Şimdi Giriş Yap

Giriş Yap

Gönderilerinizi paylaşmak ve insanların sorularını yanıtlamak ve diğer insanlarla bağlantı kurmak için Yazılım Köyü'ne giriş yapın.

Buradan kaydolun
  • Google ile devam et
  • Linkedin ile devam et
  • GitHub ile devam et
ya da

Parolamı unuttum?

Hesabınız yok mu? Buradan kaydolun

Parolamı unuttum

Şifreni mi unuttun? Lütfen e-mail adresinizi giriniz. Bir bağlantı alacaksınız ve e-posta yoluyla yeni bir şifre oluşturacaksınız.

Hesabın var mı? Şimdi Giriş Yap
Giriş YapKayıt Ol

Yazılım Köyü

Yazılım Köyü Logo Yazılım Köyü Logo

Yazılım Köyü Navigation

  • Anasayfa
  • Hakkımızda
  • Etkinlikler & Eğitimler
    • Ücretsiz Eğitimler
    • Ücretli Eğitimler
  • İş İlanları
  • Ekibimiz
  • Partnerler
  • Sponsorlar
  • İletişim
Ara
Paylaşım Yap

Mobile menu

Close
Paylaşım Yap
  • Anasayfa
  • Etkinlikler & Eğitimler
  • Partnerler
  • Sponsorlar
  • Ekibimiz
  • Gruplar
  • Grup Ekle
  • Kategoriler
  • Tüm Paylaşımlar
    • Güncel Paylaşımlar
    • Trend Paylaşımlar
    • En Çok Tıklanan Paylaşımlar
  • Oylamalar
  • Etiketler
  • Rozetler
  • Tüm Kullanıcılar
  • Destek
  • İletişim
Anasayfa/ Paylaşımlar/Q 63208
Sonraki
ibrahim Demirli
ibrahim Demirli

ibrahim Demirli

  • izmir, Turkey
  • 2 Paylaşımlar
  • 8 Yorumlar
  • 0 En İyi Yanıtlar
  • 54 Puan
Profili gör
ibrahim DemirliKöyde Yeni
Tarih: Ocak 23, 20222022-01-23T17:16:55+03:00 2022-01-23T17:16:55+03:00Kategori: Eğitim

Autofac(Asp.Net Core) Kullanımı

Autofac(Asp.Net Core) Kullanımı

Selamlar ,

Bir önceki yazımda .Net framework ile birlikte gelen DI kütüphanesindeki servis ömür’lerini incelemiştik. Varsayılanın haricinde üçüncü parti uygulamalarla da bunları özelleştirebileceğimizden bahsetmiştik. Bu yazımda harici bir paket olan Autofac kullanımından bahsedeceğim. Varsayılanın aksine Dependency sınıflarımızı nasıl yönetebiliriz bunlar hakkında konuşacağız.

Autofac Nedir ?

Yalın bir tabirle ifade edecek olursak , .NET tabanlı framework için geliştirilmiş IOC (Inversion Of Control) container’dır. Sınıflar birbirleriyle etkileşime girdiğinde , boyut ve karmaşıklık bakımından büyüdükçe uygulamaların daha esnek kalması için aralarındaki bağımlılıkları yönetir. Sadece bağımlılıkları yönetmekle kalmaz uygulamalarımızı modüler bir yapıya dönüştürmek için de oldukça faydalı kendisi.

Bağımlılıkları yönetmek için varsayılan DI kütüphanesinin neyi eksik diyebilirsiniz 🙂

Kısaca buna da değinelim ;

.Net framework ile gelen DI, işlevsellik sağlasa da çeşitli sınırlamaları da beraberinde getirir. Autofac ile bu sınırları aşıp uygulamamızı daha esnek hale getirebiliriz. Bunu daha iyi açıklamamız için kısaca Aspect Oriented Programming konusuna değinmemiz gerekiyor.

AOP çok detaylı ve üzerinde durulması gereken konulardan biri. Genellikle yazılım şirketlerinde mimari departmanının üzerinde kafa yorduğu bir başlık. Çok fazla detaya girmeden yüzeysel olarak ifade etmeye çalışacağım.

Aspect Oriented Programming Nedir ?

Uygulamalarımızda modülerleşmeyi geliştirmek için kesişen ilgileri (Cross-Cutting Concerns) ayırarak Nesneye dayalı programlamayı (OOP) tamamlayan bir programlama paradigmasıdır.

Nedir bu kesişen ilgiler ?

Projemiz büyüdükçe birbirini tekrar eden bir çok iş yapma gereksinimimiz ortaya çıkmaktadır. OOP bu konuda bize yardımcı olsa da AOP projemizi daha yalın ve modüler hale getirmeyi, mevcut durumda Readability, Reusability,Extensibility kavramlarını çok daha etkili kullanmamızı sağlayacaktır.

Business katmanında sürekli olarak tekrar eden Logging , Authorization , Exception Handling , Cache gibi her aşamada kontrol ettiğimiz durumları modüler yapıya kavuşturup tek yerden yönetilmesini amaçlar.

Kesişen ilgileri birbirinden nasıl ayıracağız ?

Bu noktada devreye Interceptor kavramı giriyor. Metod çağrımları sırasında araya girerek bizlerin kesişen ilgilerimizi işletmemizi ve yönetmemizi sağlamaktadır. Böylece metodların çalışmasından önce veya sonra bazı işlemler (Logging , Cache vs.) gerçekleştirebilmekteyiz. Oluşturduğumuz bu yapıları attribute olarak kullanabiliriz.

Autofac , hem bağımlılıklarımızı yöneten hem de AOP’u destekleyen ve bu işleri çok efektif bir şekilde yapabilen bir kütüphane olarak karşımıza çıkıyor.

Autofac Implementasyonu

Adımlar

  1. İlk olarak Nuget Package aracılığıya ilgili paketleri yüklüyoruz.

(Eğer projenizde Interceptor vs kullanmak isterseniz Autofac.Extras.DynamicProxy de indirmeniz gerekiyor.)

2. Program.cs sınıfımızı yapılandırmamız gerekiyor. Autofac.Extensions.DependencyInjection ile birlikte gelen ilgili servis provider’ını ekliyoruz. (AutofacServiceProviderFactory())

public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}

public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.UseServiceProviderFactory(new AutofacServiceProviderFactory())
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}

3. Yapacağımız örnek için ilgili interface’i oluşturuyorum.

public interface IStudentManager
{
bool Add(StudentDTO student);
bool Delete(int id);
bool Update(StudentDTO student);

List<StudentDTO> GetAllStudentList();
}

4. Oluşturduğum interface’e karşılık gelen ilgili concrete class’ı oluşturuyorum.

public class StudentManager : IStudentManager
{
private readonly IStudentDAL _dal;

public StudentManager(IStudentDAL dal)
{
_dal = dal;
}
public bool Add(StudentDTO student)
{
return true;
}

public bool Update(StudentDTO student)
{
return true;
}

public bool Delete(int id)
{
return true;
}

public List<StudentDTO> GetAllStudentList()
{
return _dal.GetAllStudentList();
}
}

5. Servisleri oluşturduktan sonra şimdi de Autofac aracılığıyla bunları kaydetmemiz gerekiyor. Bunun iki yolu var ;

a. Eğer servislerimiz çok fazla değilse Startup.cs içinde yönetebiliriz.

İlk olarak Startup.cs içinde servisleri nasıl kaydediyoruz onu inceleyelim.

public class Startup
{
public void ConfigureContainer(ContainerBuilder builder)
{
builder.RegisterType<StudentManager>().As<IStudentManager>().InstancePerDependency();
}
}

StudentManager servisimizi ContainerBuilder yardımıyla Startup.cs sınıfı içinde Register edebiliriz. ( InstancePerDependency ← → Transient )

Eklediğimiz ConfigureContainer metodu , ConfigureService metodundan sonra çalışır.

b. Uygulamamızda çok fazla servis olacaksa bunu ayrı bir modül de yönetmemiz daha doğru olacaktır.

protected override void Load(ContainerBuilder builder)
{
builder.RegisterType<StudentManager>().As<IStudentManager>();
// Other Lifetime
// Transient
//builder.RegisterType<EmployeeService>().As<IEmployeeService>()
// .InstancePerDependency();

//// Scoped
//builder.RegisterType<StudentManager>().As<IStudentManager>()
// .InstancePerLifetimeScope();

//// Singleton
//builder.RegisterType<EmployeeService>().As<IEmployeeService>()
// .SingleInstance();
}

Ayrı bir RegisterModule sınıfı oluşturuyorum. Autofac ile gelen Module sınıfı bize çeşitli override metodlar sunuyor. Varsayılan .Net Framework ile birlikte gelen servis ömürlerini (dependency lifetimes) de istersem kullanabilirim. StudentManager servisimin register işlemini tamamladım.

6. Şimdi Startup.cs sınıfında bu modülü register etmem gerekiyor.

public void ConfigureContainer(ContainerBuilder builder)
{
builder.RegisterModule(new RegisterModule());
}

Servislerimiz inject edilmeye hazır hale geldi. İlgili Controller’da inject işlemini gerçekleştirebilirim.

public class HomeController : Controller
{
private readonly IStudentManager _manager;
public HomeController(IStudentManager manager)
{
_manager = manager;
}

public IActionResult DeleteStudent()
{
bool sonuc = _manager.Sil(1);
return Ok(sonuc);
}
}

Bitirirken

Autofac’in sağladığı modüler yapı ve kısıtlayıcılığının minimum olması büyük projelerin içinde bir nevi harita işlevi görüyor. “Clean Code” kapsamında Startup sınıfını servislerle doldurmamış ve paket içinde gelen diğer fonksiyonaliteleri de kullanma imkanına sahip oluyoruz.

Umarım faydalı olmuştur.

Bir başka konuda görüşmek üzere…

Kaynaklar

Dependency Injection and Inversion of Control on .Net Core

Do you know about the terms Dependency Inject and/or Inversion of Control? No? Let’s go to talk about it! I’ll explain…

alexalvess.medium.com

Autofac with ASP.NET Core

How is Autofac more flexible than a built-in dependency injection framework in ASP.NET Core?

enlear.academy

#aspnetcore #dependencyinjection #aop #autofac
  • 0 0 Yanıt
  • 1k Görüntüleme
  • 8 Beğeni
Yorum Yap
Paylaş
  • Facebook

    Benzer Paylaşımlar

    • Orta Seviye Python Eğitimi | Kazananlar Açıklandı!
    • Hayatta, Yazılımda, İçerik Oluşturma ve diğer Her Şeyde Yardımcınız olacak 51 Yapay Zeka Aracı
    • Orta Seviye Python Eğitimi | CV İnceleme Aşaması

    Cevap eklemek için giriş yapmalısınız.

    • Google ile devam et
    • Linkedin ile devam et
    • GitHub ile devam et
    ya da

    Parolamı unuttum?

    Hesaba mı ihtiyacınız var? Buradan kaydolun

    Sidebar

    Paylaşım yap
    • Popüler
    • Yanıtlar
    • Etiketler
    • Buse TURAN

      FULL STACK SUPERMAN / SUPERWOMAN OLMAK İÇİN YAPMANIZ GEREKEN ÜCRETSİZ ...

    • Selin Dayıoğlu

      4 Ücretsiz Sertifika Sitesi

    • Yazılım Köyü

      Zemin İstanbul'la SQL Server Eğitimi | Teknik Test Aşaması

    • ibrahim Demirli

      Angular 12 ile gelen önemli yenilikler

    • Sait ORHAN

      Stajyerlerimi Nasıl Eğitiyorum?

    • Buse TURAN

      Her Geliştiricinin Favorilerine Eklemesi Gereken 12 Ücretsiz Tasarım Kaynağı

    • Buse Öztan

      HTML-CSS gibi kodlamalarda kullandığınız en favori editörünüz hangisi?

    • Buse TURAN

      BİR SONRAKİ PROJENİZ İÇİN 12 EĞLENCELİ API

    • Buse TURAN

      C++ ÖĞRENENLER İÇİN EN İYİ 8 WEB SİTESİ

    • Edanur Öztürk

      Geleceğe Giriş-Doğuş Teknoloji

    • alicekavak
      alicekavak Yanıtlandı Çok güzel bir paylaşım olmuş Ocak 31, 2023 at 3:19 pm
    • Esin Şeker
      Esin Şeker Yanıtlandı Merhaba, bu site ile yeni tanışma fırsatım oldu. Python eğitimi… Ocak 18, 2023 at 11:42 pm
    • Yazılım Köyü
      Yazılım Köyü Yanıtlandı Bugüne kadar yüzlerce gence; ücretsiz ve kaliteli bir yazılım eğitimi… Ocak 17, 2023 at 11:18 am
    • Kadir Çokçevik
      Kadir Çokçevik Yanıtlandı elinize emeğinize sağlık Ocak 11, 2023 at 8:33 am
    • Kadir Çokçevik
      Kadir Çokçevik Yanıtlandı Burdaki Kadir ben olabilir miyim acaba :) Ocak 11, 2023 at 8:32 am
    #abap#sap #aspnetcore #dependencyinjection #aop #autofac #işarayışı #destek #javascript #angular12 #software #education #oyun #yazılım .net .net6 .netcore .net core 3des 100 daily ui free :staj :java abap abd acid adesense adobe adviceslip aes ai airbnb akademi aksigorta algoritma amazon android android-libraries android-smart-tv android achitecture andromo angular anijs animate.css anime.js animista ansible ant design api api gateway apple appsetting appsettings apps geyser app yet appy pie arduino argondesignsystem artifical intelligence artificial intelligence artificialintelligence arçelik asimetrik şifreleme asp:net atom awesome screenshot & screen recorder aylıkgelir backgroundjob bakış açısı basis başarı belge bilgisayar bilgisayar mühendisliği bilgisayarmühendisliği bilişim birey blockchain blogger blueprint blush bootcamp borunv brave browser budibase buffer business analytics büyük veri c# altın kurlarını gösterme c# json İle veri Çekme c++ calculated columns canva cdn chakra ui class cloud cobalt 2 codepen challenges coderbyte codewell coding coding ninjans colorpick eyedropper component containers convertio cookie coursera'dan veri bilimine giriş kursu cqrs css cssbattle css peeper cte cursor cyber cybersecurity dapper data database datamining data science with r by pluralsight dba db shading deeplearning delivery hero deney derin Öğrenme derin Öğrenme ve makine Öğrenimi des design destek mühendisi developer değerlendirme değişim dijital göçebelik dijital ihracat dikey büyüme dikkat edilecekler dil eğitimi discord django dns docker double dracula official dyno bot döviz çevirici e-ticaret e-ticaret mağazası ecommerce edabit edit editör educative elektrik elektronik elon musk empati engineer eninovatif50şirket entityframework entity framework core 5 environment variables erasmus etkinlik exception eğitim facebook face recognition fastai figma firebase firefox teması firewall flask float fluentvalidation flutter flutterdeveloper fonksiyon fonts fonts ninja fortinet framework free freecodecamp freeillustrations freelance front-end front-end developer roadmap front-end geliştirici yol haritası frontend frontenddeveloper frontend mentor fullstack funny fuul stack react game game developer gary hamel gateway geeksforgeeks geliştirici geliştirme gerçek zamanlı sohbet uygulaması getir geçikme girişim girişimcilik git github gitlab gittigidiyor gittigidiyor teknoloji akademisi go golang goodbarber google gsap gui gzip güvenlikduvarı hackerearth hackerrank hamburgers hangfire harvard data science course hash hata hava durumu raporu uygulaması hayat hobi home office hover.css html html5-semantic html mail gönderme http http bağlantısı kurma http durum kodları httpie http mesajları http yöntemleri hulu humaaans icongenarator icons 8 ieee spectrum ikaros partners image downloader infrastructure inovasyon insider insomnia internet intership invision app ios ira design it iş iş analitiği işbulma iş fırsatı iş imkanı işimkanı işletme java java eğitim bootcamp javascript javascript30 jetpack js jservice js kütüphanleri kariyer fırsatı kategori yönetimi kaynak keras kestrel kevin murray kitaplık kişisel gelişim kişisel portfolyo kod kodlama komunite kotlin kriptoloji kullanımamaçları kute.js kültür kütüphane laravel laserwave latency leanback learn learncpp library liderlik lightbootstrapdashboard lime linkedin localstorage maaş macbook machine learning machinelearning machine learning a-z: hands-on python and r --- in data science magic effects mail send makine Öğrenimi makine Öğrenimi nasıl Çalışır? makine Öğrenimi nedir? makine Öğreniminin kullanımları makine Öğrenmesi makineöğrenimi manta manypixels mark text marvelcomicsapi maslow material ui merge sort metodoloji microsoft microsoft sql server eğitimi cv İnceleme sonuçları middleware mikro orm mikroservis mikroservisler mikroservis mimarisi mikroservis yönetimi ml mng kargo mo.js modelleme mongodb montaj motion ui mssql mvc mvm münazara. müzik oynatıcısı n11 nasaapi net5 netflix network networking networking fundamentals new features night owl nintendo nlp no-code nocode node.js node.js indir node.js kurulumu node.js nedir nodejs nodejs javascript frontend noktalı sayı not notusreact nrkdrk ntp nuxtjs nvidia oci oh my zsh olacaklar ve öğrenilecekler omnichannel one dark pro online eğitim siteleri oop ortalama maaş outrun paaatterns pagedlist palenight pandas par-tİme parçalama pasif gelir paypal pazarama pgpool php phpmyadmin phpstorm phyton platformlar arası uygulama playstation podman popmotion posgresql parçalama postgresql postgresql cte posthog prerender prisma problem tanımı productivity profesyonel programlama programming proje pycharm python python ile veri bilimi pytorch querying razer rdp react react datepicker reactjslanding react native react navigation typescript reactopen reactreduction react select reactstrap reba recommender systems renova requests responsive rest api ripng rosetta stone rsa s3 salesforce sap sap abap scikit-learn scrapy screencat scrollreveal js search ui security selamlaşma sentry seo sertifika serversiderender shades of purple shap shardsdashboardlites sibergüvenlik simetrik şifreleme simterik şifreleme single page application slack slackhq smooth ui snyk software software engineer sohbet geçmişi solid solid prensipleri sortable- hoc sorting source spa spacex spagetti kod spotifyapi sql sqlite sqlserver sql server ssr staj staj iş arayışı stajyer startup stevejobs storybook stratejik yatırım struct sublime text supabase svg export swagger swift sınıflar ve yapılar arasındaki farklar sıralama sıralama algoritma sıralama algoritmaları t-sql tallyforms tanışma tasarım tdd tech tech-academy teknoloji telegram grupları temiz kod tensorflow the future of management three.js tools toptalent topwebsites tpt tph treehouse trendyol tsql turkcell typescript udacity'den veri bilimine giriş ui ui space undraw uniqid unity uplabs user secrets uuid ux uygulama uzaktan validation velocity.js vercel veri veri analizi veri bilimcisi olmak İster misiniz? veribilimi veri bilimi az: gerçek hayat veri bilimi alıştırmaları dahil veri bilimi sertifikasyon eğitimi --- r programlama veri bilimi ve makine Öğrenimi için python eğitim kampı veritabanı veri tabanı veritabanıyöneticisi video vierbinding visual studio visual studio code vivus.js vizyon vmd vs code vscode vue vue fundemental vue fundemental eğitimi vue router web webdev webinar website web tarayıcı web tasarım weekly whatsapp whirl winter is coming wordpress wpf wrapkitreactliteuikit xai yabancı dil yapay genel zeka yapayzeka yapay zeka yapay zekanın tanımı yapay zekanın tarihi ve dönüm noktası yardım yatırım yaz stajı yazılım yazılımcı yazılım ekibi yazılım fikri yazılım geliştirici yazılım mühendisliği yemeksepeti yenimezun yeni özellikler yetiştirilmek üzere eleman youtube youtube-dl yönetim yük testi zorunlustaj zuckerberg Çalışma ortamı Çerezler Özellikler ÖĞrencİ Ücretsiz Ücretsiz eğitim Ücretsiz Eğitimler çalışma çağlayan çekiliş çevik ölçeklendirme önyüz tasarımı özgeçmiş ücret üniversite İkaros&partners İletişim İş İlanı Şirket şifreleme şifre sıfırlama

    Ekibe Katıl!

    Sosyal Medya

    Trend Etiketler

    android bootcamp c++ eğitim insider java javascript kod kodlama python sql staj uygulama veri vue fundemental eğitimi web webdev yazılım Ücretsiz eğitim Ücretsiz Eğitimler İş İlanı

    Benzer Paylaşımlar

    • Yazılım Köyü

      Orta Seviye Python Eğitimi | Kazananlar Açıklandı!

      • 0 yanıt
    • alizeyn

      Hayatta, Yazılımda, İçerik Oluşturma ve diğer Her Şeyde Yardımcınız olacak ...

      • 0 yanıt
    • Yazılım Köyü

      Orta Seviye Python Eğitimi | CV İnceleme Aşaması

      • 1 yanıt

    Başvuru Yap

    Popüler Kullanıcılar

    Yazılım Köyü

    Yazılım Köyü

    • 91 Paylaşımlar
    • 7k Puan
    İşinin Ehli
    Buse TURAN

    Buse TURAN

    • 36 Paylaşımlar
    • 2k Puan
    İşinin Ehli
    Serkan Koç

    Serkan Koç

    • 8 Paylaşımlar
    • 2k Puan
    İşinin Ehli
    Mustafa(Hüseyin) Sungur

    Mustafa(Hüseyin) Sungur

    • 44 Paylaşımlar
    • 1k Puan
    İşinin Ehli
    Sait ORHAN

    Sait ORHAN

    • 15 Paylaşımlar
    • 1k Puan
    İşinin Ehli

    Explore

    • Anasayfa
    • Etkinlikler & Eğitimler
    • Partnerler
    • Sponsorlar
    • Ekibimiz
    • Gruplar
    • Grup Ekle
    • Kategoriler
    • Tüm Paylaşımlar
      • Güncel Paylaşımlar
      • Trend Paylaşımlar
      • En Çok Tıklanan Paylaşımlar
    • Oylamalar
    • Etiketler
    • Rozetler
    • Tüm Kullanıcılar
    • Destek
    • İletişim

    Footer

    Yazılım Köyü; Türkiye’nin yazılım üretmek, ihraç etmek ve her yaştan kendini geliştirip meslek sahibi olmak isteyen insanları için kurulmuş bir sosyal sorumluluk projesidir.

    Paylaşımlar

    • Güncel Paylaşımlar
    • Trend Paylaşımlar
    • En Çok Tıklanan Paylaşımlar
    • Yanıtlanmayan Paylaşımlar

    Kurumsal

    • Blog
    • Partnerler
    • Sponsorlar
    • Ekibe Katıl
    • Hakkımızda
    • İletişim

    Yardım

    • Destek
    • Rozetler
    • Logolarımız
    • Kullanım Koşulları
    • Kişisel Verilerin Korunması
    • Aydınlatma Metni

    Sosyal Medya

    © 2021-2022 yazilimkoyu.org. Sosyal sorumluluk projesi. Bütün hakları saklıdır.