問題タブ [structuremap]
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# - StructureMap インジェクションの質問
私は StructureMap を使用しようとしていますが、本質的に 3 レベルの抽象化があります。リポジトリとデータベース インターフェイスのサービスがあります。したがって、IService は IRepo に依存し、IRepo は IDatabase に依存します。私の問題は、私の IDatabase 具象型がデータベース接続情報を取り込むことです。ObjectFactory.Configure() を使用して、これらをオンザフライで作成します。
したがって、ユーザーがいて、ユーザーは会社にリンクされており、会社の接続情報を検索し、この情報に基づいて適切な IDatabase 具象型を作成したいと考えています。スタートアップ コードで具象型を構成しました。外部から IService オブジェクトのみを使用したいので、会社名で名前を付けた名前付き IService オブジェクトを作成したいと考えています。これらのタイプをその場で作成しようとすると問題が発生します。どんな情報でも役に立ちます...
私は基本的に、具体的な型を知らなくても、名前付きインスタンスを作成し、実行時にプロパティを設定するか、特定の引数をコンストラクターに渡すことができるようにしたいと考えています。構成ファイルに具体的なタイプのセットアップがあります。ObjectFactory.GetInstance を使用しようとし、Configure メソッド内でプロパティを設定しようとしましたが、StackOverflow 例外が発生しました...どのように皮肉なのか
c# - StructureMap 作成インスタンス
起動時に構成されたインターフェイスの具象型がありますが、プロパティを設定するか、コンストラクターで異なる値を設定して、実行時に具象型のインスタンスを作成したいと考えています。私が見るすべてのインスタンスの作成は、具象型が何であるかを知っていますが、実行時には具象型がわかりません。具体的な型を知らなくても、インターフェイス/クラスの具体的なインスタンスを作成する方法はありますか? これは私が見たものです:
また:
私は似たようなことをしたい...しかし、具象型がわからない....抽象クラスまたはインターフェースのみ(この場合はプロパティを持つ)。ただし、具体的なタイプは構成されています。
c# - StructureMap で InstanceScope.HttpSession を使用するにはどうすればよいですか?
StructureMap の InstanceScope.HttpSession 機能を使用しようとしていますが、問題が発生しています。テストに使用している次の方法があります。
私の RepositoryRegistry クラスは次のようになります。
したがって、クライアント コード (ASP.NET MVC コントローラー) では、次のようなことを行います。
そして、同じセッションからでもこのコントローラーを呼び出すたびに、毎回新しいインスタンスを取得します。ここで何が間違っていますか?
c# - asp.net mvcでビューエンジンを利用した構造マップを作成する方法
私のビューは、作成した基本ビュー クラスを拡張します。
現時点では、このクラスのコンストラクター内で ObjectFactory.GetInstance を呼び出して、いくつかのインターフェイスの実装を取得していますが、構造マップを使用してそれらをコンストラクターの引数として挿入したいと考えています。
コントローラーを作成するために structuremapcontrollerfactory を使用していますが、ビューに対して同じことを行うにはどうすればよいですか?
カスタムViewEngineを実装できることはわかっていますが、リフレクターを使用してmvcのデフォルトのviewengineとその依存関係を確認すると、それは延々と続いているようで、すでにあるものを再実装する必要はありません。これを解決する狡猾なアイデアを持っている人はいますか?
コンストラクター注入の代わりにセッターを使用して物事を簡単にできることはわかっていますが、可能であればそれを避けてください。
structuremap - StructureMap チュートリアル
構造マップのチュートリアルを探しています。
誰か知っていますか?
編集: すべての回答は大歓迎ですが、Google の最初の 2 ページにないものを探していました。私は最初にそれをする意味があります。
constructor - StructureMap プロファイルを定義するときにコンストラクター引数を構成する方法
デフォルト インスタンスの ctor 引数を必要とする型のバインディングを定義する場合、その方法は非常に明確です。ただし、別のプロファイルを作成したい場合は、少し難しくなります。
これは、デフォルトのインスタンスに対してどのように行われるかです:
これは、私がプロファイルで立ち往生しているところです:
このプロファイルの型マッピングを設定するにはどうすればよいですか?
インスタンスバインディングを使用する必要がありますか (ctor 引数にデフォルト値を渡すことができます)?
c# - StructureMapで非プリミティブ型をインターフェースにラップせずに注入する
IDynamicValueのすべてのインスタンスを構成している単純なSMレジストリがあります。非プリミティブ型(私の場合はDateTimeとPredicate Of T)であるいくつかのコンストラクター引数があります。インターフェイスを使用してクラスにラップすることなく、これらを注入できる方法はありますか(自動配線できるように)。次のコードスニペットは、私が達成したいことを示しています。
その例は実行されますが、例外を除いて失敗します。
StructureMap例外コード:202PluginFamilySystem.DateTimeにデフォルトインスタンスが定義されていません
ありがとう、ニック
編集:
Freddy Riosのソリューションは、私が必要としていたものにぴったりでした。いくつかのコンストラクター引数を自動配線している場合にこれを行う方法があるかどうかはまだ興味があります(したがって、ConstructedBy()を使用できませんでした)
asp.net-mvc - StructureMap / ASP.MVC / Visual Studio / LinqToSql での奇妙な動作
最近、StructureMap で新しい MVC フレームワークを使用しており、全体的には良い結果が得られていますが、理解できない、または解決方法がわからないという非常に奇妙なエラーが発生し続けています。
これは私のアーキテクチャです:
- DBContext - linqToSql データ コンテキスト。
- IRepository - データ メソッドを定義するコントラクト。
- IService - サービス メソッドを定義するコントラクト。
- コントローラー - この例では 2 つ。
したがって、私は持っています:
StructureMap は IRepository と IService の具象型を定義するために使用され、DBContext はラムバ式 () => DSL レジストリによって構成された新しい DBContext() によって構築されます。
現在、DBContext のキャッシュはありません
問題に:
インデックス ページが読み込まれ、ControllerOne と ControllerTwo に対して 2 つの同時 Ajax 要求が作成されます。これらは、MvcContrib の StructureMap コントローラー ファクトリを介して構築されます。
StructureMap は、構成された IRepository インスタンスと新しい DBContext オブジェクトを使用して作成される IService の具象型を注入します。
ControllerOne は IService インスタンスからモデルを要求しています。これは、Newtonsoft.Json によってレンダリングされる JsonActionResult として返されます。
ControllerTwo は IService インスタンスから別のモデルを要求しています。これは、MVC フレームワークが ActionResult を実行するときに Json オブジェクトにシリアル化されます。
VS2008 で Cassini 経由で Web サイトを実行しています。
私が時々見ている問題は、LinqToSql 内から生成されたエラーです。
- データを読み取ることができないか、リーダーがすでに開いているか、
- データが既に存在するため、データ テーブルにデータを読み込むことはできません (現時点では正確な例外はありませんが、どちらも LinqToSql の内部にあります)。
ControllerOne でエラーが発生した場合、ControllerTwo も同様のエラーで失敗し、2 つの要求が共有オブジェクトで実行されているかのようになります。
常にエラーが発生するわけではありませんが、自分のアーキテクチャと、何らかの方法で構成が間違っていることを心配するには十分です。
StructureMap が後続のリクエストで ControllerOne と ControllerTwo の同じインスタンスを返す方法はありますか、または何らかの方法で DBContext をキャッシュしている場合はありますか? 頼んでないのに?
Visual Studio / Cassini 内で作業しているときに、似たようなことを見た人はいますか? IIS を使用することは役に立ちますか?
LinqToSql を削除する必要がありますか?
Visual Studio を閉じて再度開くと、問題がしばらく解決することがよくあります。
誰かが問題に光を当てることができれば、どうもありがとう。
編集: NLog ログ ファイルからのログ スニペットを含めます (スレッド ID はセミコロンの前の数字です):