Bu makale makine çevirisi ayna makalesidir, orijinal makaleye geçmek için lütfen buraya tıklayın.

Görünüm: 20665|Yanıt: 0

[.NET Core] ASP.NET Core, NullReferenceException'a Autofac özniteliği enjekte eder

[Bağlantıyı kopyala]
2020-9-12 20:57:21 tarihinde yayınlandı | | | |
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:

Otomatik kayıt uygulamak için MVC'de autofac kullanın
https://www.itsvse.com/thread-8993-1-1.html

Autofac "Dairesel bileşen bağımlılığı tespit edildi" hatası çözüldü
https://www.itsvse.com/thread-8970-1-1.html

ASP.NET Core, IOC enjeksiyonunu uygulamak için Autofac kullanır
https://www.itsvse.com/thread-7563-1-1.html

Autofac bileşeninin örnek kapsamı
https://www.itsvse.com/thread-5080-1-1.html

mvc Controller Autofac özniteliği kontrolceye enjekte edildi
https://www.itsvse.com/thread-3621-1-1.html

ASP.NET Çekirdek bağımlılık enjeksiyonu, beraberinde gelen IOC konteynerini kullanır
https://www.itsvse.com/thread-7562-1-1.html

ASP.NET Core, IOC enjeksiyonunu uygulamak için Autofac kullanır
https://www.itsvse.com/thread-7563-1-1.html

ASP.NET Core, AOP müdahalesini uygulamak için Autofac kullanır
https://www.itsvse.com/thread-7566-1-1.html


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)





Önceki:Hangfire normal şekilde veri ekliyor ama istisna nedeniyle çalışmaya devam ediyor
Önümüzdeki:Sqlite verisi gelişmiş tablolarda E4A ile nasıl görüntülenir?
Feragatname:
Code Farmer Network tarafından yayımlanan tüm yazılım, programlama materyalleri veya makaleler yalnızca öğrenme ve araştırma amaçları içindir; Yukarıdaki içerik ticari veya yasa dışı amaçlarla kullanılamaz, aksi takdirde kullanıcılar tüm sonuçları ödemelidir. Bu sitedeki bilgiler internetten alınmakta olup, telif hakkı anlaşmazlıklarının bu siteyle hiçbir ilgisi yoktur. Yukarıdaki içeriği indirmeden sonraki 24 saat içinde bilgisayarınızdan tamamen silmelisiniz. Programı beğendiyseniz, lütfen orijinal yazılımı destekleyin, kayıt satın alın ve daha iyi orijinal hizmetler alın. Herhangi bir ihlal olursa, lütfen bizimle e-posta yoluyla iletişime geçin.

Mail To:help@itsvse.com