問題タブ [reflection]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
web-services - ASP.NET Web サービス参照の識別
私の日常の仕事では、Web サービス (および最近では WCF) を介して負荷分散されたアプリ サーバーと通信する、負荷分散された Web サーバーがあります。常に、新しい Web サイトやサービスを追加したり、既存のサービスを利用したりできる 4 ~ 6 の異なるチームがあります。おそらく、約 20 ~ 30 の異なる Web アプリケーションとそれに対応するサービスがあります。
残念ながら、競合する優先順位、組織構造、プロジェクトのタイムライン、財務バケットなどのために、これを一元的に制御できないことを考えると、かなり混乱しています. 再利用されるさまざまなサービスがありますが、フロントエンドに固有のものはたくさんあります。
理想的には、この状況をより適切に制御できるようにすることであり、それを制御しようとしていますが、それには時間がかかります。私たちがやりたいことの 1 つは、Web サイトとアプリ サーバーの間のすべての相互関係についてもっと調べることです。
Reflector を使用してアセンブリ間の依存関係を見つけましたが、サービス間のトラフィック パターンを確認できるようにしたいと考えています。
Web サービスの関係をマッピングするためのオプションは何ですか? ほとんどの場合、主に内部サービス (Web からアプリ、アプリからアプリ、バッチからアプリなど) について話しています。頭のてっぺんから、それにアプローチする2つの方法を考えることができます。
- Web 参照のアセンブリを分析します。ここでの欠点は、すべてが Web 参照であるとは限らず、WCF 接続がどのようにリストされているかがわからないことです。ただし、これは少なくとも接続の 80% を見つけるための出発点となります。その分析を行うことができるツールを知っている人はいますか? 私が言ったように、アセンブリ参照に Reflector を使用しましたが、Web 参照には何も見つかりません。
- おそらくIISを利用して、出入りするトラフィックを受動的に監視し、どういうわけか、何がどこから呼び出されているかを突き止めます。役立つエンタープライズ ツールを検討していますが、実装されるまでにはしばらく時間がかかります (そして多くの費用がかかります)。しかし、迅速かつ安価に役立つものはありますか? 特に 1 つのツール (AmberPoint) は、サーバー上の IIS を利用して、インバウンドおよびアウトバウンドのトラフィックを監視し、少し特別なソースを追加して、トラフィックのマップの作成を開始できます。とても素敵ですが、バンドルが必要です。
そもそもどうやってこの混乱に陥ったのですか?私たちがそれを制御してそこから抜け出すのを手伝おうとしているだけで、私を打ちのめします。
ありがとう、マット
c# - C# 動的イベント サブスクリプション
C# イベントを動的にサブスクライブして、オブジェクト インスタンスとイベントの名前を含む文字列名を指定すると、そのイベントをサブスクライブして、そのイベントが発生したときに何か (たとえば、コンソールに書き込む) を行うにはどうすればよいでしょうか?
Reflection を使用すると、これは不可能なように思われます。可能であれば、Reflection.Emit を使用する必要がないようにしたいと思います。これが現在 (私にとって) それを行う唯一の方法のように思われるからです。
/EDIT:イベントに必要なデリゲートの署名がわかりません。これが問題の核心です
/編集 2:デリゲートの反変性は良い計画のように思えますが、このソリューションを使用するために必要な仮定を立てることはできません
c# - C# でのリフレクションの正当化
C# コードでのリフレクションの妥当性について疑問に思っています。たとえば、特定のソース オブジェクトのプロパティを反復処理し、指定された型の新しいインスタンスを作成し、同じ名前のプロパティの値を一方から他方にコピーする関数を作成しました。LINQ の複数のテーブルからの継承の欠如を回避するために、自動生成された LINQ オブジェクトから別のオブジェクトにデータをコピーするためにこれを作成しました。
ただし、このようなコードは本当に「ごまかしている」と思わざるを得ません。つまり、提供された言語構造を使用して特定の目的を達成するのではなく、それらを回避することができます。
この種のコードはどの程度許容されますか? リスクは何ですか?このアプローチの正当な用途は何ですか?
reflection - リフレクションのユースケース
最近、私はC ++について同僚と話していて、クラスフィールドの名前の文字列を取得して、その名前のフィールドを抽出する方法がないことを嘆きました。言い換えれば、それは反射を欠いています。彼は私に困惑した表情を見せ、いつ誰かがそのようなことをする必要があるのかと尋ねました。
頭のてっぺんから、「ねえ、今すぐやる必要がある」以外は、彼に良い答えはありませんでした。そこで私は座って、さまざまな言語でのリフレクションで実際に行ったことのいくつかのリストを思いつきました。残念ながら、私の例のほとんどはPythonでのWebプログラミングからのものであり、ここの人々がもっと多くの例を持っていることを望んでいました。これが私が思いついたリストです:
x = "Hello World!"のような行を含む構成ファイルがあるとします。
y = 5.0
は、あるオブジェクトのフィールドをconfig
そのファイルの値と等しく設定します。(これは、C ++で実行できることを望んでいましたが、実際には実行できませんでした。)オブジェクトのリストを並べ替えるときは、構成ファイルまたはWeb要求からの属性の名前を指定して、任意の属性に基づいて並べ替えます。
ネットワークプロトコルを使用するソフトウェアを作成する場合、リフレクションを使用すると、そのプロトコルの文字列値に基づいてメソッドを呼び出すことができます。たとえば
!some_command arg1 arg2
、メソッド呼び出しに変換して、actions.some_command(arg1, arg2)
その関数がIRCチャネルに返すものをすべて出力するIRCボットを作成しました。Pythonの__getattr__関数(Ruby / Smalltalkのmethod_missingのようなもの)を使用するとき、私はlate_totalなどの統計がたくさんあるクラスで作業していました。すべての統計について、_percentを追加して、カウントしている合計値のパーセンテージとしてその統計を取得できるようにしたかった(たとえば、stats.late_total_percent)。リフレクションはこれを非常に簡単にしました。
それで、ここの誰かが、振り返りが役に立ったときの彼ら自身のプログラミング経験からの例を与えることができますか?次回、同僚から「そんなことをしたい」と聞かれたときは、もっと準備をしていきたいと思います。
c# - 実行時に属性のパラメーターを変更する
ランタイム中に属性のパラメーターを変更できるかどうかわかりません。たとえば、アセンブリ内に次のクラスがあります
これはサード パーティ ベンダーによって提供されるクラスであり、コードを変更することはできません。しかし、上記の説明は正確ではないことがわかりました。上記のクラスのインスタンスをプロパティ グリッドにバインドするときに、"change me" カテゴリ名を別の名前に変更したいと考えています。
これを行う方法を教えてください。
.net - アプリケーションが必要とするアセンブリのリストを取得する
.net プロジェクトに必要なすべてのアセンブリ (.net フレームワークを除く) を、セットアップ ファイルとしてnsisにパッケージ化できるフォルダーに入れる方法はありますか?
リフレクションを使用して dll のリストを取得する小さなコンソール アプリを作成しようとしましたが、dll が .net フレームワークからのものかどうかを判断する簡単な方法を見つけるのに苦労しました。
答えは、すべての依存関係を出力する Visual Studio の単純なスイッチ、またはそれを実行できるスタンドアロン アプリ、Nsis のプラグイン、または私が見逃したリフレクションに関する情報である可能性があります。
.net - アセンブリが .NET Framework の一部であるかどうかの判断
アセンブリ名またはアセンブリ クラス (またはそれに類するもの) から、アセンブリが.NETフレームワーク (つまり)の一部であるかどうかをどのように判断できSystem.windows.Forms
ますか?
これまで、PublicKeyToken と CodeBase のプロパティについて検討してきましたが、これらはフレームワーク全体で常に同じであるとは限りません。
この情報が必要な理由は、クライアント コンピューター上にある必要がある、EXE ファイルが使用しているアセンブリのリストを取得するためです。これにより、Visual Studio セットアップ システムを使用せずにセットアップ ファイルに正しいファイルをパッケージ化できます。問題は、.NET フレームワーク アセンブリを一切取得したくないということです。また、メジャー アップデートが終了したときに簡単にロールアウトできる自動プロセスにしたいのです。
究極の解決策は、 IsFramework プロパティがあることです... :)
c# - コードが含まれているアセンブリのパスを取得するにはどうすればよいですか?
現在のコードが存在するアセンブリのパスを取得する方法はありますか?呼び出し元のアセンブリのパスは必要ありません。コードを含むパスだけが必要です。
基本的に、私の単体テストは、dllに関連して配置されているいくつかのxmlテストファイルを読み取る必要があります。テストdllがTestDriven.NET、MbUnit GUI、またはその他のものから実行されているかどうかに関係なく、パスが常に正しく解決されるようにしたい。
編集:人々は私が求めていることを誤解しているようです。
私のテストライブラリは次の場所にあります
C:\ projects \ myapplication \ daotests \ bin \ Debug \ daotests.dll
そして私はこの道を取得したいと思います:
C:\ projects \ myapplication \ daotests \ bin \ Debug \
MbUnit Guiから実行すると、これまでの3つの提案は失敗します。
Environment.CurrentDirectory
c:\ Program Files\MbUnit を与えますSystem.Reflection.Assembly.GetAssembly(typeof(DaoTests)).Location
C:\ Documents and Settings \ george \ Local Settings \ Temp \ ....\DaoTests.dllを提供し ますSystem.Reflection.Assembly.GetExecutingAssembly().Location
前と同じになります。
c# - 設計時にクラス名を知らずにオブジェクトを作成する
リフレクションを使用して、ユーザー DLL を調査し、その中にクラスのオブジェクトを作成する必要があります。
それを行う簡単な方法は何ですか?
c# - C# 式を動的に評価するにはどうすればよいですか?
私は同等のことをしたい:
Biri のリンクに従って、このスニペットを取得しました (廃止されたメソッドを削除するように変更されましたICodeCompiler.CreateCompiler()
: