この記事は機械翻訳のミラー記事です。元の記事にジャンプするにはこちらをクリックしてください。

眺める: 20665|答える: 0

[.NET Core] ASP.NET CoreはAutofac属性でNullReferenceExceptionを注入します

[リンクをコピー]
2020年9月12日 20:57:21に投稿 | | | |
Autofacは素晴らしいです。 NET IoCコンテナ。 クラス間の依存関係を管理するため、スケールや複雑さが増してもアプリケーションを簡単に変更できます。 通常の.NETクラスをコンポーネントとして扱うことで実装されます。
私はオートファックコンテナについてもよく言い、多くの記事を書いています:

MVCでautofacを使って自動登録を実装します
https://www.itsvse.com/thread-8993-1-1.html

Autofac「循環部品依存性検出」エラーが解決されました
https://www.itsvse.com/thread-8970-1-1.html

ASP.NET CoreはAutofacを使ってIOC注入を実装しています
https://www.itsvse.com/thread-7563-1-1.html

オートファックコンポーネントのインスタンス範囲
https://www.itsvse.com/thread-5080-1-1.html

mvc コントローラー Autofac 属性をコントローラーに注入
https://www.itsvse.com/thread-3621-1-1.html

ASP.NET Core依存注入は付属するIOCコンテナを使用します
https://www.itsvse.com/thread-7562-1-1.html

ASP.NET CoreはAutofacを使ってIOC注入を実装しています
https://www.itsvse.com/thread-7563-1-1.html

ASP.NET CoreはAutofacを使ってAOP傍受を実装しています
https://www.itsvse.com/thread-7566-1-1.html


Core 3.1 ASP.NET 新しいプロジェクトを作成し、nugetを通じてautofac関連パッケージを参照してください。以下のように:


新しいITestインターフェースと実装を作成しましょう。コードは以下の通りです。




新しいBaseControllerのベースクラスコントローラを作成すると、他のコントローラが抽象クラスを引き継ぎ、ITestプロパティをベースクラスに追加すると、コードは以下のようになります。

WeatherForecastControllerをBaseController抽象クラスから継承し、以下のテストメソッドを追加します。

StartupクラスのConfigureContainerメソッドはインターフェースを登録し、コントローラー属性の入力を設定します。コードは以下の通りです:

ぜひ訪れてみてください:ハイパーリンクのログインが見えます。

NullReferenceException例外は空欄メッセージで引用されており、以下の図に示されています。



NullReferenceException: Object reference not set to an instance of an object.


パスコンストラクタはITestインターフェースに注入され、そのメソッドが呼び出され、テストが通過し、通常通り呼び出すことができます。

異常の原因

コントローラーの実装はより特殊で、コントローラーはデフォルトで独自のコンテナを通じてResolve&Activateを行うのではなく、MVC自体によって管理されますが、Microsoftは以下の方法を提供しています:

AddControllersAsServices() メソッドを呼び出してコントローラーに独自のコンテナを使わせることができます。そのメインソースコードは以下の通りです:



デフォルトのスタートアップオブジェクトにおけるConfigureServicesメソッドは次のように設定されています:

私たちはこれを以下のように修正します:

又は:

ServiceBasedControllerActivatorのソースコードは以下の通りです。

設定が完了したら、DIコンテナから直接コントローラーをロードすると、コントローラーがAutofacからサービスを解析し、設定したプロパティ注入が有効になります。 以下に示すように:



最後に、asp.net コアのソースコードアドレスが添付されています。

ハイパーリンクのログインが見えます。

(終わり)





先の:Hangfireは通常通りデータを追加しますが、例外のために実行が続いています
次に:E4Aで高度な表にSqliteのデータを表示するにはどうすればいいですか?
免責事項:
Code Farmer Networkが発行するすべてのソフトウェア、プログラミング資料、記事は学習および研究目的のみを目的としています。 上記の内容は商業的または違法な目的で使用されてはならず、そうでなければ利用者はすべての結果を負うことになります。 このサイトの情報はインターネットからのものであり、著作権紛争はこのサイトとは関係ありません。 ダウンロード後24時間以内に上記の内容を完全にパソコンから削除してください。 もしこのプログラムを気に入ったら、正規のソフトウェアを支持し、登録を購入し、より良い本物のサービスを受けてください。 もし侵害があれば、メールでご連絡ください。

Mail To:help@itsvse.com