問題タブ [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.
c# - C# 継承された Open Generics コンパイル
今日、私の脳は死んでしまい、コンパイラにジェネリック推論に継承を強制的に使用させる明確な方法を見つけることができませんでした。
次の4つのクラスを想像してください
モデル
エンティティ
ここで、論理的には、継承するクラスはそれを指定する必要があるため、継承を介して継承するものModelEntity<>
(のタイプを指定する)を取得するときは当然のことと見なす必要があります。TModel
ModelEntity<>
コンパイラにこれを強制的に理解させる方法はありますか?
例えば
現在 を使用したい場合はModelEntity<>
、そのタイプを指定する必要があります。次のような:
TModel
どこでも議論を取り除くにはどうすればよいですか?コンパイル時に TModel 型に引き続きアクセスできますか? たとえば、 baseModel
プロパティを介して。
私にとっては、次のようなものです。
それを呼び出すとき、私が特定しなければならないのは、例えば
それよりも
これは現在可能なことでしょうか?
これは C# 6/7 用に調達する価値がありますか?
c# - Castle Windsor: オープン ジェネリック型の条件付き登録
私は次のものを持っています:
キャッスル ウィンザー DIに条件付登録を希望するIRepository<T>
場合T
はISuperType
、提供しますISuperRepository<T>
。それ以外の場合は、提供しますIRepository<T>.
たとえば、 の場合A : ISuperType
、Resolve<IRepository<A>>
を提供しSuperRepository<A>
、Resolve<IRepository<B>>
を提供しますRepository<B>
。
どうすればそれを達成できますか?
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
編集 これは私にとっては解決策かもしれませんが、少し面倒です。
c# - 開いているジェネリック型の間違ったインスタンスを返すストラクチャマップ?
実行時にイベントハンドラーのインスタンスを取得するために、オープンジェネリックで構造マップを使用しようとしています。オープンジェネリックベースの構成を使用しています
私のコードは、このようにコンストラクター インジェクションを介して依存関係を要求する場合にうまく機能します。
ただし、私の場合、実行時に依存関係をフェッチする必要があります。以下は私が使用しているコードです
次のエラーが表示されます。{"'MyNameSpace.EventHandlerClass.Handle(MyNameSpace.Events.ThirdEvent)' に最適なオーバーロードされたメソッドには、無効な引数が含まれています"}
GetAllInstances は、正しい型で GetAllInstances を呼び出したにもかかわらず、ThirdEvent イベントを予期する Handle メソッドで EventHandlerClass のオブジェクトを返すようです。
これはバグですか?または、設定を間違えましたか?
c# - C# オープン ジェネリック型比較。Generic<> は Generic の「親」です?
クラス MyGeneric<T> と、型 MyGeneric<string>、MyGeneric<int>、MyGeneric<double> などから作成されたいくつかのキャッシュ データがあります。
どこかで特定のデータをチェックして、それが MyGeneric かどうかを確認する必要があるため、次のようにコーディングします。
また
または、この種の愚かな実装は機能しますが、破棄したいと思います:
実際のデータ型とオープン ジェネリック型 (MyGeneric<>) の関係を確認する方法はありますか?
c# - オープンジェネリックでデコレーターを登録する
特定のコントラクトと実装のためにデコレータを登録する方法について、フィードバックを得たいと思っていました。これが私が持っているものです
このようなマーカー クエリ インターフェイス
このようなクエリ ハンドラ コントラクト
このような実際のクエリ
そして最後に、そのようなクエリハンドラ
これがクエリハンドラのロギングデコレータです
このような simpleinjector register デコレーターを使用してこのセットアップを登録しようとすると
失敗し、「IQueryHandlerNew を使用するには 2 つの型引数が必要です」と表示されます
同様のセットアップを使用して、1 つの型引数 (たとえば、リポジトリ用) でデコレータを登録すると、問題なく登録されます。
ここで何が間違っているのかわかりません。simpleinjector と複数の型引数を持つデコレータの登録に関する既知の制限はありますか?
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 でこれをマップする適切な方法は、可能な各マッピングを明示的にマッピングすることによってオープン ジェネリックを放棄するか、すべてのプロパティを手動でマップし、リフレクションを使用してオープン タイプを解決する必要があるカスタム オープン ジェネリック型コンバーターを使用することです。割り当て?