問題タブ [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 に答える
966 参照

c#-4.0 - StructureMapインスタンスファクトリメソッド

オープンジェネリック型のインスタンスを作成するためのファクトリメソッドを登録しようとしていますMongoCollection<>。ただし、GetInstanceファクトリメソッドの代わりにMongoCollectionのコンストラクタを使用しているように見えます。

それから私はします

この行を実行するとGetInstance、ファクトリメソッド内のブレークポイントに到達することはありませんが、 StructureMapException「PluginFamilyMongoDb.Driver.MongoServerSettingsにデフォルトのインスタンスが定義されていません」というメッセージがスローされます。そのためのコンストラクターがありますが、MongoCollection構造MongoServerSettingsマップでそのコンストラクターを使用したくないので、ファクトリメソッドを使用したいと思います。

ファクトリメソッドを使用しない理由はありますか?これはバグですか?

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

c# - AutoFixture: Open Generics Specimen Builder の構成

Open Generics を使用するオブジェクト モデルがあります (はい、はい、2 つの問題があります。それが私がここにいる理由です :) :-

AutoFixture にD上記の Anonymous インスタンスを生成させようとしています。ただし、AutoFixture 自体には を構築するための戦略が組み込まれていないため、次のことがIOGF<>わかります。

根底にあるメッセージは次のとおりです。

Ploeh.AutoFixture.ObjectCreationException : AutoFixture は IOGF`1[C] からインスタンスを作成できませんでした。おそらく、パブリック コンストラクターがなく、抽象型または非パブリック型であるためです。

具体的な実装を提供できることをうれしく思います。

関連付けられたバインディング:

次のテストに合格するにはどうすればよいですか (または、そのように問題を見る必要がありますか??)。

(これに関する議論や問題が codeplex サイトにあります - 私はこれを簡単に実装する必要があり、これが単に悪い考えである場合、および/または何かを見逃した場合は、これを削除してもかまいません)

EDIT 2: (マークの回答に関するコメントも参照してください) ここでの (明らかに不自然な) コンテキストは、小さな (制御された/理解しやすい :) ペアまたはトリプレットではなく、大規模な「ほぼ完全なシステム」テスト対象システム オブジェクト グラフの受け入れテストです。ユニットまたは統合テスト シナリオのクラスの。自問自答の括弧内の文で暗示されているように、私はこの種のテストが理にかなっていると完全に確信しているわけではありません.

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

c# - autofacオープンジェネリックiRepositoryxml構成

autofacとリポジトリパターン(iRepository)を使用したいのですが、XML構成を使用してautofacを構成する方法がわかりません。

他の誰かがこの問題に遭遇したように?

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

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>の規則にを使用できることを望んでいます。それらすべてをマップする必要がある場合は、実行時にリフレクションを使用して解決する方法を見つけたほうがよいでしょう。

次の場合:

更新:カスタムバインディングジェネレーターを使用したバインディング(実装については、以下の私の回答を参照してください)

主な方法

イニシャライザファクトリ

イニシャライザ

コンテンツモデル

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

mapping - StructuremapWhatDoIHaveは私がそれを持っていると言っています。ObjectFactoryは私がしないと言います

Jeez louise、私はペストに乗ったレガシーアプリをSMにレトロフィットさせようとしていて、あらゆる種類の奇妙なことに遭遇しています。それで、私はすべての奇妙な質問をお詫びします。

だから私はこのコードを持っています

私が持っているものはこれを持っています

バリデーターは次のようなエラーを受け取ります

これは完全なエラーであり、内部エラーはありません。おそらく、構文エラーを見落としているだけです。助けてくれてありがとう、ライフ

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

ninject-extensions - Ninject カスタム インスタンス プロバイダを使用して、ファクトリ メソッド引数を使用して正常にバインドし、解決する

私は、具象ファクトリが具象実装の名前付きバインディングに一致するファクトリメソッドの文字列引数に基づいて実装を返すと信じている同様の質問に対するこの受け入れられた回答を研究してきました。

ファクトリが抽象ファクトリである場合に、もう少し複雑な例を適切に動作させるのに苦労しており、Ninject 規則ベースのバインディングを使用したいと考えています。次のテストを検討してください。

インターネットで一度見たので、たいまつとナイフでジャグリングを試みます。

bicycleBuilderFactoryこのエラーで割り当てようとすると、刺されて炎上します。

型を解決するために、ファクトリ メソッド引数( )とジェネリック型引数( )を使用して、メソッドとカスタム プロバイダーを使用してバインドすることは可能ですか? ToFactory() "Germany"IVehicleBiulder<BlueBicycle>, BlueBicycle

テスト用の残りのコードは、できるだけコンパクトで読みやすいものです。

VehicleBuilder の実装

車両の実装:

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

ninject - オープン ジェネリックで Ninject Factory Extensions の ToFactory メソッドを使用することは可能ですか?

Ninject Conventions ExtensionsとカスタムIBindingGeneratorを使用して実装がバインドされ、 Ninject Factory Extensions のメソッドとカスタム インスタンス プロバイダーを使用してインターフェイスがバインドさ れている、以前に回答した質問に基づいて構築しています。ICarICarFactory ToFactory()

以前の ではなく に制約されてIVehicleFactory<T>いるをバインドして使用できるように、リファクタリングしようとしています。このようにして、ファクトリのメソッドで車両タイプの名前を渡す代わりに、ジェネリック型パラメーターで目的の車両を指定できます。TICarICarFactoryCreateCar()

ToFactory()この手法を使用して、オープンなジェネリック インターフェイスをバインドすることは可能ですか?

間違ったツリーを吠えているICarような気がしますが、名前で型を指定していたときに、ICar型自体をジェネリック型パラメーターとして指定するのが自然な進化のように思えました...

現在失敗しているテストは次のとおりです。

そしてInvalidCastException投げられた:

そして工場のインターフェース:

カスタム インスタンス プロバイダーでは、そのブレークポイントでデバッガーを停止することさえできないため、そこで何が起こっているのか本当にわかりません。

編集 1 - IVehicleFactory 署名とカスタム インスタンス プロバイダーの変更

ここでは、IVehicleFactory署名をジェネリックCreate<T>()メソッドを使用するように変更し、それ自体に明示的にバインドMercedesしました。

そして、最初のジェネリック型パラメーターの名前を返す新しいカスタム インスタンス プロバイダー:

これが新しいテストですが、まだ合格していません:

}

ANinject.ActivationExceptionがスローされます:

Mercedes明示的に自己バインドしたため、クラスが見つからない理由がわかりません。私が間違っていることを見つけることができますか?

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

c# - Autofacでオープンジェネリックに多数登録する方法

私はAutofacが初めてです(DIではありません)。状況は次のとおりです。

私はこれらのインターフェースを持っています:

そして、私のソリューションにはそれらの多くの実装があります:

等々。現在、次のように登録しています。

ご覧のとおり、同じ登録がたくさんあります。(SimpleInjector以前使用していた) では、それらすべてを 1 行で登録できました。

Autofacでこのようなことを行うことは可能ですか?