問題タブ [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#-4.0 - StructureMapインスタンスファクトリメソッド
オープンジェネリック型のインスタンスを作成するためのファクトリメソッドを登録しようとしていますMongoCollection<>
。ただし、GetInstance
ファクトリメソッドの代わりにMongoCollectionのコンストラクタを使用しているように見えます。
それから私はします
この行を実行するとGetInstance
、ファクトリメソッド内のブレークポイントに到達することはありませんが、 StructureMapException
「PluginFamilyMongoDb.Driver.MongoServerSettingsにデフォルトのインスタンスが定義されていません」というメッセージがスローされます。そのためのコンストラクターがありますが、MongoCollection
構造MongoServerSettings
マップでそのコンストラクターを使用したくないので、ファクトリメソッドを使用したいと思います。
ファクトリメソッドを使用しない理由はありますか?これはバグですか?
c# - AutoFixture: Open Generics Specimen Builder の構成
Open Generics を使用するオブジェクト モデルがあります (はい、はい、2 つの問題があります。それが私がここにいる理由です :) :-
AutoFixture にD
上記の Anonymous インスタンスを生成させようとしています。ただし、AutoFixture 自体には を構築するための戦略が組み込まれていないため、次のことがIOGF<>
わかります。
根底にあるメッセージは次のとおりです。
Ploeh.AutoFixture.ObjectCreationException : AutoFixture は IOGF`1[C] からインスタンスを作成できませんでした。おそらく、パブリック コンストラクターがなく、抽象型または非パブリック型であるためです。
具体的な実装を提供できることをうれしく思います。
関連付けられたバインディング:
次のテストに合格するにはどうすればよいですか (または、そのように問題を見る必要がありますか??)。
(これに関する議論や問題が codeplex サイトにあります - 私はこれを簡単に実装する必要があり、これが単に悪い考えである場合、および/または何かを見逃した場合は、これを削除してもかまいません)
EDIT 2: (マークの回答に関するコメントも参照してください) ここでの (明らかに不自然な) コンテキストは、小さな (制御された/理解しやすい :) ペアまたはトリプレットではなく、大規模な「ほぼ完全なシステム」テスト対象システム オブジェクト グラフの受け入れテストです。ユニットまたは統合テスト シナリオのクラスの。自問自答の括弧内の文で暗示されているように、私はこの種のテストが理にかなっていると完全に確信しているわけではありません.
c# - autofacオープンジェネリックiRepositoryxml構成
autofacとリポジトリパターン(iRepository)を使用したいのですが、XML構成を使用してautofacを構成する方法がわかりません。
他の誰かがこの問題に遭遇したように?
ninject - Ninject Conventions拡張機能を使用してジェネリック型を継承にバインドするにはどうすればよいですか?
Ninject ConventionsInitializerForXXX
を使用して(非ジェネリック実装)をIInitializer<XXX>
(ジェネリックインターフェイス)
にバインドして、名前がInitializerForで始まり、次のように終わる非ジェネリック実装を解決するようにするにはどうすればよいですか?IInitializer<T>
typeof(T).Name
非抽象クラスが直接実装されておらずIInitializer<T>
、一部の実装が他の実装から継承している場合:
InitializerForShadeOfBlue
から継承InitializerForBlue
InitializerForBlue
抽象から継承Initializer<Blue>
- 抽象
Initializer<T>
は直接実装しますIInitializer<T>
ShadeOfxxxの静脈には文字通り何百もの初期化子があるので、使用できる.EndsWith(typeof(T).Name)
特定IInitializer<T>
の規則にを使用できることを望んでいます。それらすべてをマップする必要がある場合は、実行時にリフレクションを使用して解決する方法を見つけたほうがよいでしょう。
次の場合:
更新:カスタムバインディングジェネレーターを使用したバインディング(実装については、以下の私の回答を参照してください)
主な方法
イニシャライザファクトリ
イニシャライザ
コンテンツモデル
mapping - StructuremapWhatDoIHaveは私がそれを持っていると言っています。ObjectFactoryは私がしないと言います
Jeez louise、私はペストに乗ったレガシーアプリをSMにレトロフィットさせようとしていて、あらゆる種類の奇妙なことに遭遇しています。それで、私はすべての奇妙な質問をお詫びします。
だから私はこのコードを持っています
私が持っているものはこれを持っています
バリデーターは次のようなエラーを受け取ります
これは完全なエラーであり、内部エラーはありません。おそらく、構文エラーを見落としているだけです。助けてくれてありがとう、ライフ
ninject-extensions - Ninject カスタム インスタンス プロバイダを使用して、ファクトリ メソッド引数を使用して正常にバインドし、解決する
私は、具象ファクトリが具象実装の名前付きバインディングに一致するファクトリメソッドの文字列引数に基づいて実装を返すと信じている同様の質問に対するこの受け入れられた回答を研究してきました。
ファクトリが抽象ファクトリである場合に、もう少し複雑な例を適切に動作させるのに苦労しており、Ninject 規則ベースのバインディングを使用したいと考えています。次のテストを検討してください。
インターネットで一度見たので、たいまつとナイフでジャグリングを試みます。
bicycleBuilderFactory
このエラーで割り当てようとすると、刺されて炎上します。
型を解決するために、ファクトリ メソッド引数( )とジェネリック型引数( )を使用して、メソッドとカスタム プロバイダーを使用してバインドすることは可能ですか? ToFactory()
"Germany"
IVehicleBiulder<BlueBicycle>, BlueBicycle
テスト用の残りのコードは、できるだけコンパクトで読みやすいものです。
VehicleBuilder の実装
車両の実装:
ninject - オープン ジェネリックで Ninject Factory Extensions の ToFactory メソッドを使用することは可能ですか?
Ninject Conventions ExtensionsとカスタムIBindingGeneratorを使用して実装がバインドされ、 Ninject Factory Extensions のメソッドとカスタム インスタンス プロバイダーを使用してインターフェイスがバインドさ
れている、以前に回答した質問に基づいて構築しています。ICar
ICarFactory
ToFactory()
以前の ではなく に制約されてIVehicleFactory<T>
いるをバインドして使用できるように、リファクタリングしようとしています。このようにして、ファクトリのメソッドで車両タイプの名前を渡す代わりに、ジェネリック型パラメーターで目的の車両を指定できます。T
ICar
ICarFactory
CreateCar()
ToFactory()
この手法を使用して、オープンなジェネリック インターフェイスをバインドすることは可能ですか?
間違ったツリーを吠えているICar
ような気がしますが、名前で型を指定していたときに、ICar
型自体をジェネリック型パラメーターとして指定するのが自然な進化のように思えました...
現在失敗しているテストは次のとおりです。
そしてInvalidCastException
投げられた:
そして工場のインターフェース:
カスタム インスタンス プロバイダーでは、そのブレークポイントでデバッガーを停止することさえできないため、そこで何が起こっているのか本当にわかりません。
編集 1 - IVehicleFactory
署名とカスタム インスタンス プロバイダーの変更
ここでは、IVehicleFactory
署名をジェネリックCreate<T>()
メソッドを使用するように変更し、それ自体に明示的にバインドMercedes
しました。
そして、最初のジェネリック型パラメーターの名前を返す新しいカスタム インスタンス プロバイダー:
これが新しいテストですが、まだ合格していません:
}
ANinject.ActivationException
がスローされます:
Mercedes
明示的に自己バインドしたため、クラスが見つからない理由がわかりません。私が間違っていることを見つけることができますか?
c# - Autofacでオープンジェネリックに多数登録する方法
私はAutofacが初めてです(DIではありません)。状況は次のとおりです。
私はこれらのインターフェースを持っています:
そして、私のソリューションにはそれらの多くの実装があります:
等々。現在、次のように登録しています。
ご覧のとおり、同じ登録がたくさんあります。(SimpleInjector
以前使用していた) では、それらすべてを 1 行で登録できました。
Autofacでこのようなことを行うことは可能ですか?