問題タブ [activator]
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.
c# - Activator.CreateInstanceがコンストラクターを見つけることができません(MissingMethodException)
次のコンストラクターを持つクラスがあります
パラメータのないデフォルトのコンストラクタと一緒に。
次に、インスタンスを作成しようとしていますが、パラメーターなしでのみ機能します。
これは問題なく機能しますが、パラメーターを渡したい場合は機能しません。
これにより、MissingMethodException
次のようになります。
タイプVialis.LightLink.Controller.Scenarios.Composites.DelayCompositeDesignerのコンストラクターが見つかりませんでした
ここに何かアイデアはありますか?
問題は、構築中にオブジェクトを渡す必要があることです。
から継承するすべてのタイプをロードするデザイナがありますCompositeBase
。次に、これらはリストに追加され、ユーザーはそこからデザイナーにドラッグできます。そうすると、ドラッグされたインスタンスがデザイナーに追加されます。これらの各クラスには、カスタムプロパティが定義されています。
ユーザーがデザイナでアイテムを選択すると、そのタイプのデザイナをロードするためにこれらの属性が調べられます。たとえば、この場合、ユーザーがインスタンスDelayComposite
の「遅延」プロパティを設定できるようにするラベルとスライダーを持つユーザーコントロールをロードしDelayComposite
ます。
これまでのところ、コンストラクターにパラメーターを渡さなければ、これは正常に機能します。設計者はのインスタンスを作成し、DelayCompositeDesigner
それをWPFのcontentプロパティに割り当てますContentPresenter
。
ただし、そのデザイナはデザイナで選択されたプロパティを変更する必要があるため、DelayComposite
このインスタンスをデザイナに渡す必要があります。これが、コンストラクターが次のように見える理由です。
提案は大歓迎です
@VolkerK
コードの結果は次のとおりです。
<---- foo Vialis.LightLink.Controller.Scenarios.Composites.DelayCompositeDesignerVoid .ctor()Vialis.LightLink.Controller.Scenarios.Composites.DelayCompositeDesignerVoid .ctor(Vialis.LightLink.Controller.Scenarios.Composites.DelayComposite)param:Vialis .LightLink.Controller.Scenarios.Composites.DelayComposite foo ---->
Leppie、あなたは正しかったです。何らかの理由で、UIアプリケーションでCompositesアセンブリを参照していました...これは、実行時にロードしていたので、実行すべきことではありませんでした。次のコードが機能します。
ご覧のとおり、コードにはDelayComposite
タイプの知識がありません。
これは現在の問題を解決しますが、私が達成したいことのために多くの新しい問題を紹介します。どちらにしても、ここに返信してくれたすべての人に感謝します。
次のコードについては、複数の人から提案されています。
にActivator.CreateInstance
は、次のような署名があります。
だからそれは私のコードを受け入れるはずですが、私は提案されたコードを試してみます
アップデート:
私は提案されたようにこれを試しました:
結果は同じです。
c# - アクティベーターと静的クラス
Activator クラスを使用して、そうでなければ循環参照 (依存性注入) を作成するアセンブリ内のリソースにアクセスするという考えを投げかけています。以前に参照が必要なバニラ クラスでそれを行ったことがありますが、私の質問は、Activator を使用して静的クラスにアクセスできますか?
私をつまずかせているのは、Activator がオブジェクトのインスタンスを返すのに対し、静的クラスにはインスタンスがないことです。これは可能ですか?
reflection - C# CF2.0 - System.Activator と内部クラス
エンティティのコレクションを含むデータ プロバイダーがあります。データ プロバイダーを介して新しいエンティティを作成できるようにしたいだけです。
つまり、新しいレコードを作成するには、次を使用する必要があります。
私の問題は、エンティティを内部に設定すると、System.Activator がそれらのインスタンスを作成できないことです。各データ プロバイダーは、渡されたエンティティのジェネリック型を持つ基本クラスを使用します。
したがって、現時点では、私の AddNew() メソッドには次のものが含まれています。
データ プロバイダーの名前空間の外で新しいエンティティを手動でインスタンス化できれば、明らかに世界の終わりではありませんが、それらを保存する方法がないことを考えると無意味に思えます。
編集:すべてのプロバイダー、エンティティなどが同じ名前空間にあることを忘れていました。
asp.net - Activator.CreateInstanceは、パラメーター'Type'に対してArgumentNullExceptionをスローします
最近、プロファイルプロバイダーで問題が発生しました。プロファイルが正しく取得されませんでした(以下のエラーを参照)。ローカルでは機能しましたが、Web配置プロジェクトによってコンパイルされたコードをサーバーに配置するとクラッシュしました。
値をnullにすることはできません。パラメータ名:タイプ説明:現在のWebリクエストの実行中に未処理の例外が発生しました。エラーとそれがコードのどこで発生したかについての詳細は、スタックトレースを確認してください。
スタックトレース:
[ArgumentNullException:値をnullにすることはできません。パラメータ名:type] System.Activator.CreateInstance(Type type、Boolean nonPublic)+2796915 System.Web.Profile.ProfileBase.CreateMyInstance(String username、Boolean isAuthenticated)+76 System.Web.Profile.ProfileBase.Create(String username、ブールisAuthenticated)+312
私は解決策を見つけましたが、それは明白ではありません(以下の私の答えを参照してください)。
c# - C#実行時にジェネリックスを使用してオブジェクトを作成する
次の例では、文字列を介して動的にオブジェクトを作成できます。ただし、BASEクラスのパブリックメソッドを取得する方法はありません。設計時にどのジェネリックが使用されるかわからないため、objをBASEにキャストできません。実行時にそうすることについての提案は素晴らしいでしょう。
プロジェクトAにはクラスA{T、J>:BASE {T、J>
が含まれていますプロジェクトBにはクラスB {T、J>:BASE {T、J>が含まれています
プロジェクトCには、クラスBASE {T、J>
パブリック仮想制御{T、J>アイテムが含まれています
プロジェクトWindowsフォーム
cmdGo_Clickイベント
string dll = textbox1.text // ex "ProjectA.dll"
string class = textbox2.text // ex "A`2 [enuT、enuJ]"
object obj = activator.createinstancefrom(dll、class)
c# - 型指定されたデータセットを動的に定義しますか?
実行時にコードで型指定されたデータセットのインスタンスを動的に作成しようとしています。私は利用可能なタイプを持っていますが、これをしようとすると:
問題は、コードを実行しようとすると、型が有効ではないように見えることです。ここで何が間違っているのでしょうか?
c# - Activator.CreateInstance(t、42、args)がコンストラクターを見つけることができません
ファクトリパターンスタイルの関数で次のコード(のわずかに拡張されたバージョン)を使用しています:
p>ただし、実行時にconstuctor not found例外がスローされるため、理由がわかりません。
data.Case.ToString()メソッドは、単一の引数を取るコンストラクターを持つクラスの名前SingleItemNewを返します。
誰かが問題が何であるかを知っていますか?
乾杯、エド
c# - リフレクションを使用してジェネリックC#オブジェクトを動的に作成するにはどうすればよいですか?
C#では、次のオブジェクトがあります。
C#リフレクション( Activator.CreateInstance )を使用してTaskAまたはTaskBを動的に作成したいと思います。ただし、事前にタイプがわからないため、「namespace.TaskA」や「namespace.TaskAB」などの文字列に基づいて動的にTaskAを作成する必要があります。
c# - 複数のコンストラクターを持つクラスのインスタンスを作成するには、Activator を使用するのが最善の方法ですか?
私は、アプリケーションが実行時にインターフェースを実装するクラスを作成して、プラグ可能な機能を許可する「プラグイン」システムを実装しました。
プラグイン アセンブリ内で指定されたインターフェイスを実装するすべてのクラスで Activator.CreateInstance を使用して、これを実現しています。
現時点では、クラスの実装を 1 つだけ使用しており、そのために 2 つのコンストラクター引数があり、それらを Activator.CreateInstance 呼び出しに含めています。
このコンストラクター署名を使用しない実装が追加された場合、これが後で問題を引き起こす可能性があることを認識しています。これを処理するのに最適な状況は何ですか。
コンストラクターがこの署名を使用する必要があることをドキュメントを介して明示的に言い、それを try/catch で囲みますか?
または、クラスが持つコンストラクターを呼び出す方法はありますか? どういうわけかコンストラクターの引数を一致させる必要があることを念頭に置いてください。
または...引数を静的クラスに静的プロパティとして配置することにより、コンストラクターの引数を回避しますか?
c# - C#foreachループが原因でCS0246タイプまたは名前空間が見つかりませんでした
タイプのリストを循環し、それぞれのインスタンスを作成するforeachループがあります。ただし、ビルドすると、CS0246エラーが発生します(「タイプまたは名前空間が見つかりませんでした...」)。コードの簡略化されたバージョンは次のとおりです。
編集:フォローアップの質問
私のforeachループは次のようになります。
タイプリストはオブジェクトタイプになりました
これは正常にコンパイルされますが、実行すると次のようになります。
これを2行に分割して、最初にオブジェクトを作成してからリストに追加すると、最初の行は問題ありません(オブジェクトは正常に作成されます)が、同じエラーメッセージが表示されます。
編集:コードサンプルを更新