問題タブ [open-generics]

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.

0 投票する
1 に答える
90 参照

c# - C# 継承された Open Generics コンパイル

今日、私の脳は死んでしまい、コンパイラにジェネリック推論に継承を強制的に使用させる明確な方法を見つけることができませんでした。

次の4つのクラスを想像してください

モデル

エンティティ

ここで、論理的には、継承するクラスはそれを指定する必要があるため、継承を介して継承するものModelEntity<>(のタイプを指定する)を取得するときは当然のことと見なす必要があります。TModelModelEntity<>

コンパイラにこれを強制的に理解させる方法はありますか?

例えば

現在 を使用したい場合はModelEntity<>、そのタイプを指定する必要があります。次のような:

TModelどこでも議論を取り除くにはどうすればよいですか?コンパイル時に TModel 型に引き続きアクセスできますか? たとえば、 baseModelプロパティを介して。

私にとっては、次のようなものです。

それを呼び出すとき、私が特定しなければならないのは、例えば

それよりも

これは現在可能なことでしょうか?

これは C# 6/7 用に調達する価値がありますか?

0 投票する
2 に答える
641 参照

c# - Castle Windsor: オープン ジェネリック型の条件付き登録

私は次のものを持っています:

キャッスル ウィンザー DIに条件付登録を希望するIRepository<T>場合TISuperType、提供しますISuperRepository<T>。それ以外の場合は、提供しますIRepository<T>.

たとえば、 の場合A : ISuperTypeResolve<IRepository<A>>を提供しSuperRepository<A>Resolve<IRepository<B>>を提供しますRepository<B>

どうすればそれを達成できますか?

0 投票する
1 に答える
1133 参照

generics - Automapper と Open Generics

https://github.com/AutoMapper/AutoMapper/wiki/Open-Genericsで説明されているように、Automapper の Open Generics を使用して、ユーザーとアカウントの間のマッピングを実行しようとしています。

ソースと宛先を作成しました

AccountService でマッピングを実行したい

しかし、私は例外を取得します

タイプ マップ構成が欠落しているか、サポートされていないマッピングです。

マッピング タイプ: ユーザー -> アカウント OpenGenerics.Console.Models.User -> OpenGenerics.Console.Models.Account

宛先パス: Destination`1.Value.Value

ソース値: OpenGenerics.Console.Models.User

https://github.com/AutoMapper/AutoMapper/wiki/Open-Genericsでのアプローチが機能することintを確認しましたdouble

編集 これは私にとっては解決策かもしれませんが、少し面倒です。

0 投票する
1 に答える
139 参照

c# - 開いているジェネリック型の間違ったインスタンスを返すストラクチャマップ?

実行時にイベントハンドラーのインスタンスを取得するために、オープンジェネリックで構造マップを使用しようとしています。オープンジェネリックベースの構成を使用しています

私のコードは、このようにコンストラクター インジェクションを介して依存関係を要求する場合にうまく機能します。

ただし、私の場合、実行時に依存関係をフェッチする必要があります。以下は私が使用しているコードです

次のエラーが表示されます。{"'MyNameSpace.EventHandlerClass.Handle(MyNameSpace.Events.ThirdEvent)' に最適なオーバーロードされたメソッドには、無効な引数が含まれています"}

GetAllInstances は、正しい型で GetAllInstances を呼び出したにもかかわらず、ThirdEvent イベントを予期する Handle メソッドで EventHandlerClass のオブジェクトを返すようです。

これはバグですか?または、設定を間違えましたか?

0 投票する
1 に答える
94 参照

c# - C# オープン ジェネリック型比較。Generic<> は Generic の「親」です?

クラス MyGeneric<T> と、型 MyGeneric<string>、MyGeneric<int>、MyGeneric<double> などから作成されたいくつかのキャッシュ データがあります。

どこかで特定のデータをチェックして、それが MyGeneric かどうかを確認する必要があるため、次のようにコーディングします。

また

または、この種の愚かな実装は機能しますが、破棄したいと思います:

実際のデータ型とオープン ジェネリック型 (MyGeneric<>) の関係を確認する方法はありますか?

0 投票する
0 に答える
183 参照

c# - オープンジェネリックでデコレーターを登録する

特定のコントラクトと実装のためにデコレータを登録する方法について、フィードバックを得たいと思っていました。これが私が持っているものです

このようなマーカー クエリ インターフェイス

このようなクエリ ハンドラ コントラクト

このような実際のクエリ

そして最後に、そのようなクエリハンドラ

これがクエリハンドラのロギングデコレータです

このような simpleinjector register デコレーターを使用してこのセットアップを登録しようとすると

失敗し、「IQueryHandlerNew を使用するには 2 つの型引数が必要です」と表示されます

同様のセットアップを使用して、1 つの型引数 (たとえば、リポジトリ用) でデコレータを登録すると、問題なく登録されます。

ここで何が間違っているのかわかりません。simpleinjector と複数の型引数を持つデコレータの登録に関する既知の制限はありますか?

0 投票する
1 に答える
1429 参照

generics - オープン ジェネリックを使用して自動マッピングし、ForMember ステートメントにソースを含める

最近、Automapper 4.2.1 から 5.1.1 にアップグレードしましたが、オープン ジェネリックを含む以前の有効なマッピングで問題が発生しています。

以前は、automapper 構成内で、次のオープン汎用マッピング構成がありました。

これは Automapper 4 では機能しますが、InvalidOperaionException経由でマッピングしようとすると5 で失敗しますIMapper.Map<TDestination>(source)アイテム 操作のマッピングを実行すると、「シーケンスには一致する要素が含まれていませんForMemberという例外メッセージが表示されて失敗するようです。

以下の実装コードの例に反映されているように、 IPager<TSource>implementsIEnumerable<TSource>と のItemsプロパティはModelPager<TDestination>であるIEnumerable<TDestination>ため、キャストは有効である必要があります。TSourceそして、それぞれに有効なマッピングが存在しますTDestination

IPagerインターフェイス

IPager の実装

モデルページャー

Automapper 5 でこれをマップする適切な方法は、可能な各マッピングを明示的にマッピングすることによってオープン ジェネリックを放棄するか、すべてのプロパティを手動でマップし、リフレクションを使用してオープン タイプを解決する必要があるカスタム オープン ジェネリック型コンバーターを使用することです。割り当て?