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

眺める: 36608|答える: 1

[.NET Core] ASP.NET コア(iii) ActivatorUtilitiesを用いて動的にインスタンスを作成する

[リンクをコピー]
掲載地 2020/12/01 13:50:31 | | | |
復習:

ASP.NET Core(1)はRedisキャッシュを使用しています
https://www.itsvse.com/thread-9393-1-1.html

ASP.NET コア(2) コードによるアプリケーションの再起動
https://www.itsvse.com/thread-9480-1-1.html

通常、インスタンス化されたオブジェクトは新しいキーワードを持つクラスのインスタンス化です

C#は以下の方法でクラスファクトリー内でクラスのインスタンスを動的に作成します:


Activator.CreateInstance (Type)
Activator.CreateInstance(Type, Object[])


まず、ITestインターフェースを次のように定義します。

TestAとTestBの2つの実装クラスを定義し、コードは以下の通りです。

ここで TestB は空でない構成子を持つ

TestBクラスのGetUserNameメソッドは、IConfigurationを通じて設定ファイルを読み取り、入ってくるパラメータとつなぎ合わせて返出力値を返す必要があります。

設定ファイルは以下の通りです:



私たちはdllを動的に読み込み、リフレクションで作成し、それぞれActivatorとActivatorUtilitiesを通じてインスタンス化することでオブジェクトを作成します。以下のコードで:

結果の返却:

退役
「こんにちは、itsvse.com」
例: メッセージ
「型 'ClassLibrary1.TestB' に対してパラメータレスコンストラクタが定義されていません。」

退役
「こんにちは、itsvse.com」
退役
「ああああ itsvse.com」

Activatorを使ってTestBオブジェクトを作成すると、エラーが報告されます:型 'ClassLibrary1.TestB' に対するパラメータレス構造体は定義されていません.

ActivatorUtilitiesを通じてTestAおよびTestBを作成するとエラーは報告されず、以下の通り通常通り実行できます。




.NETフレームワーク内でActivatorを使ってオブジェクトをインスタンス化すること自体は問題ありませんが、asp.net コアではIOCやDIの概念が導入され、多くのオブジェクトはパラメータレスのコンストラクタではなく、対応する実装クラスで渡す必要があります。

ここで_services静的変数は次のように定義されます:

CreateInstance(IServiceProvider, Type, Object[])
パラメーター

提供者
IServiceProvider(サービスプロバイダー)
依存関係解決のためのサービスプロバイダー

instanceType
種類
発動するタイプ

パラメータ
対象[]
プロバイダーから提供されていないコンストラクタパラメータ


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

(終わり)




先の:モバイルおよびデスクトップのOAuth 2.0セキュリティ分析およびCodeVerifierメカニズム
次に:JSCを使ってJavaScriptでC#コール用のdllを生成します
掲載地 2021/09/22 20:31:33 |
学ぶことを...
免責事項:
Code Farmer Networkが発行するすべてのソフトウェア、プログラミング資料、記事は学習および研究目的のみを目的としています。 上記の内容は商業的または違法な目的で使用されてはならず、そうでなければ利用者はすべての結果を負うことになります。 このサイトの情報はインターネットからのものであり、著作権紛争はこのサイトとは関係ありません。 ダウンロード後24時間以内に上記の内容を完全にパソコンから削除してください。 もしこのプログラムを気に入ったら、正規のソフトウェアを支持し、登録を購入し、より良い本物のサービスを受けてください。 もし侵害があれば、メールでご連絡ください。

Mail To:help@itsvse.com