Autofac harika. NET IoC konteynerleri. Sınıflar arasındaki bağımlılıkları yönetir, böylece uygulama ölçek ve karmaşıklık arttıkça kolayca değiştirilebilir. Bu, normal .NET sınıflarının bileşen olarak ele alınmasıyla uygulanır. Ayrıca Autofac konteynerleri konusunda klişe biriyim ve birçok makale yazdım:
Core 3.1 ASP.NET yeni bir proje oluşturun ve nuget üzerinden autofac ile ilgili paketlere referans verin, aşağıdaki gibi:
Yeni bir ITest arayüzü ve uygulaması oluşturalım, kod şöyle:
Yeni bir BaseController temel sınıf denetleyicisi oluşturun, diğer denetleyiciler soyut sınıfı devralır, temel sınıfa ITest özelliğini eklersiniz ve kod şu şekildedir:
WeatherForecastController'ın BaseController soyut sınıfından miras almasına izin verin ve aşağıdaki test yöntemini ekleyin:
Startup sınıfındaki ConfigureContainer yöntemi arayüzü kaydeder ve denetleyici öznitelik girişini ayarlar, kod şöyledir:
Ziyaret etmeye çalışın:Bağlantı girişi görünür.
NullReferenceException istisnası boş mesajda alıntılanmıştır, aşağıdaki şekilde gösterilmiştir:
NullReferenceException: Object reference not set to an instance of an object.
GeçÜretici ITest arayüzüne enjekte edilir, yöntemi çağrılır, test geçer ve normal çağrı yapılabilir。
Anormalliklerin nedenleri
Denetleyicinin uygulaması daha özeldir, Denetleyici varsayılan olarak kendi konteyneri üzerinden Çözüm/Aktif etmez, MVC tarafından yönetilir, ancak Microsoft bu yöntemi sağlar:
Kontrolörün kendi konteynerini kullanmasını AddControllersAsServices() yöntemini çağırarak sağlayabilirsiniz; bu yöntemin ana kaynak kodu şu şekildedir:
Varsayılan Startup nesnesinde ConfigureServices yöntemi şu şekilde yapılandırılmıştır:
Bunu şu şekilde değiştiriyoruz:
Veya:
ServiceBasedControllerActivator kaynak kodu aşağıdaki gibidir:
Yapılandırıldıktan sonra, denetleyiciyi doğrudan DI konteynerinden yükleyin, denetleyici servisi Autofac'tan ayrıştıracak ve yapılandırdığımız özellik enjeksiyonu devreye girecek. Aşağıda gösterildiği gibi:
Son olarak, asp.net çekirdeğin kaynak kodu adresi eklenir:
Bağlantı girişi görünür.
(Son)
|