Autofac Nedir? Net Core Uygulamasında Autofac Nasıl Kullanılır?

Merhaba arkadaşlar bugün sizlerle ASP.NET CORE 3.1 projemizde Autofac kütüphanesini nasıl kullanırız ona göz atalım.

Autofac Nedir?

Genel olarak Autofac .Net Framework için geliştirilmiş bir IOC container’dır diyebiliriz.

IOC Container Nedir?

Oluşturulacak olan nesnelerin yaşam döngülerinin yönetilmesidir. Yani Inversion of Control (IoC) bir yazılım tasarım prensibidir ve basit tabiriyle nesnelerin uygulama boyunca ki yaşam döngüsünden sorumludur denebilir. Uygulama içerisinde kullanılan objelerin instance’larının yönetimini sağlar ve bağımlılığı en aza indirgemeyi amaçlar.

Autofac kütüphanesi yokken nesnelerin yaşam döngülerini bizler .Net Core uygulamalarımızda startup.cs sınıfı içerisinde yer alan ConfigureServices metodu içerisinde registery edebiliyorduk.

Startup.cs sınıfı içerisinde yer alan ConfigureServices metodu
Startup.cs sınıfı içerisinde yer alan ConfigureServices metodu
Startup.cs sınıfı içerisinde yer alan ConfigureServices metodu

Yukarıda ki görsele baktığımızda DataAccess katmanında yer alan Repository sınıf ve interfacesini, Business katmanında yer alan sınıf ve interfacesini görmekteyiz. Peki .Net Core uygulamalarında bu registery tanımları ne anlama gelmektedir ? Örnegin yukardaki görselden hareket edecek olursak, istemci uygulamadan bir ICategoryService instance istediğinde CategoryService instance oluşturarak uygulama yaşam döngüsü boyunca uygulamanın kullanımına sunmaktır.

Autofac ise bize güzel bir kullanım sunmaktadır. Peki bu şekilde kolay bir kullanım varken neden Autofac’i kullanalım diyenleriniz illaki olacaktır. Onlar için yanıtımız AOP (Aspect Oriented Programming)konusunu araştırarak kendilerinin bulmasını sağlayalım.

Öncelikle Business katmanımıza gelerek sağ tık Manage Nuget Package alanına tıklayalım. Burada Autofac ve Autofac.Extras.DynamicProxy paketlerini install diyerek projemize indirelim.

Business katmanına indirilecek olan kütüphaneler

Yukarıda görselde görülen paketlerimizi projemize indirdikten sonra bu ekranımızı kapatalım.

Projelerimizde klasör yapılarına önem vermemiz gerektiği için Business katmanına DependencyResolvers adlı bir klasör oluşturalım daha sonra bu klasörün içerisine Autofac isimli bir klasör oluşturalım. Bu klasörün içine ise AutofacBusinessModule isimli bir sınıf oluşturalım. Yani klasör yapımız aşağıdaki gibi olması gerekmektedir.

Business Katmanı klasör yapısı

Daha sonra sınıfımızın içerisine gelerek registery edecegimiz interfaceleri ve sınıflarımızı ekliyelim.

Örnek kullanım şekli

Aynı şekilde projemizin ihtiyaç duymuş olduğu bu bağımlılıkları burada registery ettikten sonra bu katmanla bir işimiz kalmamaktadır. İster Mvc projesi ister API projesi oluşturmuş olun farketmez bu yazdığımız sınıfı uygulama ayağa kalkarken tanıtmamız gerektiği için, program.cs sınıfı içerisine gelip gerekli kodlarımızı yazalım.

Program.cs sınıfı

Yukarıdaki kodu MVC veya API projenizde yer alan program.cs sınıfınızın içerisine yazdığınız da visual studio’nun size kızdığını fark edeceksiniz. Çünkü Autofac kütüphanesinin dependecy paketini projemize dahil etmedik. O zaman MVC veya API projemize sağ tık Manage NuGet Package alanına giderek aşagıdaki görseldeki paketi projemize indirelim.

Autofac Dependcy paketi

Artık program.cs sınıfı içerisinde visual studionun bize kızmadığını göreceksiniz.

Program.cs Sınıfı Son Hali

Evet artık projemizin olduğu sınıfları Autofac kütüphanesi sayesinde register ettiğimize göre startup.cs sınıfımızda registery işlemi yaptıgımız kodlara gerek kalmadı.

Startup.cs sınıfı içerisinde yer alan ConfigureServices metodu
Startup.cs sınıfı içerisinde yer alan ConfigureServices metodu
startup.cs sınıfı

O zaman burada gördüğünüz services.AddScoped ile başlayan satırları silip uygulamayı ayağa kaldırdığımızda uygulamamızın hatasız bir şekilde çalıştığını göreceksiniz.

Umarım güzel bir içerik olmuştur. İlgilenenlere faydalı olması dileğiyle…

Veysel MUTLU — Bilgisayar Mühendisi

Proje Kodları: https://github.com/vmutlu/HappyFarmer

linkedin.com/in/veysel-mutlu/

Junior Software Developer