問題タブ [structuremap3]
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# - DI フレームワークは、複数の構成を持つ同じインターフェイスの依存関係をどのように解決しますか?
以下のコード サンプルを検討してください。
このための DI 構成: ( StructureMapコード スニペットが提供されます)
私のコードでは、ある時点でMyInterfaceImplementor1を使用し、別の時点でMyInterfaceImplementor2を使用しているとします。私の質問は、DI フレームワーク (StructureMap またはその他) が上記の構成をどのように解決するかということです。また、 MyInterfaceImplementor1 のインスタンスを返す場所と、 MyInterfaceImplementor2 のインスタンスをいつ返すかをどのように決定しますか? または私はここで何か間違ったことをしていますか?
structuremap3 - Structuremap 3 - アプリケーションの起動時にすべてのリクエストに対して単一のオブジェクト インスタンスをキャッシュする
structuremap 3 から始まる Web アプリケーションでオブジェクトをキャッシュする方法を知っている人はいますか? シングルトン メソッドは正しいアプローチ ( o.For().Singleton().Use()) ですか? はいの場合、キャッシュされますか?
ありがとう
c# - ダイナミック型&ダブルディスパッチでミステリー
最近、動的型を介して二重ディスパッチを実装しようとして、興味深い問題に遭遇しました。
ちょっとした背景: 私のプロジェクトの 1 つで、StructureMap コンテナーと動的型を使用して、実行時にメソッド呼び出しをディスパッチするクリーンな方法として使用しています。StructureMap コンテナーを新しいバージョン (3) に更新した後、一部の単体テストが永久にハングし始めました。
問題を再現するために、2 つの最大限に単純化された単体テストを作成しました。最初のテストは (*) でマークされた行で永久にハングし、2 番目のテストは期待どおりにパスします。それらの唯一の違いは、最初のメソッドが LambdaInstance タイプの StructureMap のオブジェクトを返すことです。
ぶら下げテスト:
合格テスト:
どのようにそれが可能でしょうか?それとも疲れて寝たいだけですか?
とにかく、特定のライブラリで特定の問題の修正を見つけようとするのではなく、概念的かつ教育的な問題です。
UPDATE1: VS2010(SP1)、VS2013 で検証された、4.0 & 4.5 ターゲット フレームワークに問題が存在することを確認しました。
更新 2: シンプルなコンソール アプリケーションも同じ行でハングしています (したがって、テスト ランナーの問題ではありません)。
また、 GitHubでスタンドアロンの例を作成しました。
c# - StructureMap から取得した HttpContext の Null ユーザー
わかりました、私の前の質問/設定には変数が多すぎたので、これを必要最小限のコンポーネントに落としています。
StructureMap3 を使用した以下のコードを考えると...
これはウォッチ ウィンドウでどのように可能ですか?
2.x から StructureMap 3.x を使用するようにアップグレードする Web アプリケーションがありますが、特定の依存関係で奇妙な動作が発生します。
ユーザーがページを要求したときにいくつかのことを確認するために使用する ISecurityService があります。このサービスは、私が ICurrentUser と呼んだ小さなインターフェイスに依存しています。クラスの実装は非常に単純で、実際には構造体である可能性があります。
これは、以下のコードを使用した依存性注入によって取得されます。
リクエストが来ると、サイト全体の認証が最初に行われISecurityService
ます。これは OWIN の内部で発生し、データHttpContext.User
が入力される前に発生するように見えるため、null です。
後でISecurityService
、現在のユーザーがサイトの利用規約の現在のバージョンに同意したかどうかを を介してチェックする ActionFilter があります。同意していない場合は、最初に同意するページにリダイレクトされます。
これはすべて、structuremap 2.x では問題なく機能しました。StructureMap3 への移行のために、Nuget パッケージ StructureMap.MVC5 をインストールして、作業を高速化しました。
使用条件を確認するためにコードが ActionFilter の行に到達すると、これがあります。
の中でCheckLoginAgreedToTermsOfUse()
、私のインスタンスCurrentUser
はnullです。成功したとしても、 getCurrentUser() 内の私のブレークポイントはヒットしていないようです。今回は解決されていたとしても、前回は null だったので、それは当然の結論であるかのようです。
getCurrentUser()
のリクエストで が呼び出されない理由について、ちょっと困惑していISecurityService
ます。.LifecycleIs<UniquePerRequestLifecycle>()
フックアップにa を明示的に貼り付けてみましたが、ICurrentUser
効果はありませんでした。
更新: わかりましたので、頭を上げて、以下で受け入れられている方法を使い始めました。これまでのところうまくいきましたが、コアの問題は解決しませんでした. StructureMap.MVC5
に基づいて、新しいStructureMap3
が NestedContainers を使用することが判明しました。デフォルトが Transient であるかどうかに関係なく、NestedContainer の有効期間にリクエストのスコープを設定します。したがってHttpContextBase
、最初にリクエストしたとき、残りのリクエストに対して同じインスタンスが返されます(リクエストの存続期間の後半でコンテキストが変更されたとしても、NestedContainerを使用しない必要があります(私が理解しているように) ASP.NET vNext を複雑にするか、明示的にライフサイクルを設定します。For<>().Use<>()
リクエストごとに新しいインスタンスを提供するマッピング。NestedContainer ごとのこのスコープ設定は、MVC と同様にコントローラーで問題を引き起こすことに注意してください。StructureMap.MVC5
パッケージはこれを で処理しますが、ビューControllerConvention
は処理しません。また、再帰ビューまたは複数回使用されるビューも同様に問題を引き起こす可能性があります。ビューの問題の恒久的な修正をまだ探しています。今のところ、に戻しましたDefaultContainer
。
c# - StructureMap: ランタイム引数を選択したコンストラクターに渡します
コンストラクターを選択し、ランタイム引数を渡したいです。レジストリが提供する引数を使用してコンストラクターを選択する方法を知っており、ランタイム引数を提供する方法も知っています。しかし、両方を組み合わせる方法がわかりません。
クラス:
登録方法(これが機能しないことはわかっています):
これは、登録することができれば、それを作成して引数を提供する方法です。
前もって感謝します。
(注:StructureMap 3.xソリューションを探しています。ほとんど機能しているように見えるオプションのいくつかは、3.xでは利用できないように見える2.x構文を使用しています-または移動しました)
asp.net-web-api - System.Web.Mvc への参照がない ASP.NET Web API 2 の StructureMap
StructureMap.WebApi2 パッケージには、System.Web.Mvc に依存する StructureMap.MVC5 への依存関係があります。
Web API のみのプロジェクトを構築しているため、System.Web.Mvc アセンブリを含めたくありません。
この依存関係なしに Web API 2 で StructureMap を使用することは可能ですか?