問題タブ [simple-injector]
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# - シンプルインジェクター非同期ライフタイムスコープとセキュリティ例外
私は以下に示すようにAsyncCommandHandlerDecorator<TCommand>
とを持っています:LifetimeScopedCommandHandlerDecorator<TCommand>
そして私はこのようなデコレータを登録します:
しかし、非同期プロセスが呼び出そうとすると、次のエラーが発生します。
セキュリティ透過メソッド「LifetimeScopedCommandHandlerDecorator`1.Handle(!0)」によるセキュリティクリティカルメソッド「SimpleInjector.SimpleInjectorLifetimeScopeExtensions.BeginLifetimeScope(SimpleInjector.Container)」へのアクセスに失敗しました。
との両方でSecurityCritical
属性を使用しようとしましたが、役に立ちませんでした。何かアイデアはありますか?LifetimeScopedCommandHandlerDecorator.Handle
AsyncCommandHandlerDecorator.Handle
アップデート:
例外はタイプMethodAccessException
であり、完全なスタックトレースは次のとおりです。
MYNAMESPACE.LifetimeScopedCommandHandlerDecorator`1.Handle(TCommandコマンド)で
MYNAMESPACE.AsyncCommandHandlerDecorator`1。<>c_DisplayClass1.b _0(Object _) で
System.Threading.QueueUserWorkItemCallback.WaitCallback_Context(Object state)で
System.Threading.ExecutionContext.RunInternal(ExecutionContext executeContext、ContextCallbackコールバック、オブジェクト状態、ブール値preserveSyncCtx)で
System.Threading.ExecutionContext.Run(ExecutionContext executeContext、ContextCallbackコールバック、オブジェクト状態、ブール値preserveSyncCtx)で
System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()で
System.Threading.ThreadPoolWorkQueue.Dispatch()で
System.Threading._ThreadPoolWaitCallback.PerformWaitCallback()で
更新2:
属性の有無にかかわらずSecurityCritical
、問題が存在します。
mvvm - 自己完結型のクライアント サーバー コードと IoC コンテナーを備えたステートフル MVVM アプリケーションのアーキテクチャ
複数の画面があり、WCF Web サービスと通信するアプリケーションがあります。お気に入りの IoC コンテナーには SimpleInjector を使用し、WPF を使用した MMVM には Caliburn Micro を使用しています。
ITransportClient
Web サービスへの接続を制御し、メッセージを送受信する別のクラス実装があります。
アプリケーションには次の状態があります。
- アプリケーションの起動と初期化。
- ログインフォームを表示します。
- ログインフォームは でチャットサーバーへの接続を行います
ITransportClient.Login(username, password)
。 - ログインに成功すると、新しい MainWindow ビューが表示されます。ログインに失敗した場合は、ユーザーに再度資格情報を求めるプロンプトを表示します。
- ログインすると、MainWindow は WCF サービスとの間で送受信されるメッセージを制御します。
- サーバーとの接続が失われた場合 ( で通知
ITransportClientCallback.OnTransportDisconnected
)、またはユーザーがログアウトをクリックした場合、ログイン フォームが再度表示されます。
私が利用できるテクノロジと、これが私の最初の MVVM プロジェクトであるため、次のアーキテクチャと設計に関する質問があります。
- 別のログイン画面を表示し、接続時にメイン画面を表示し、接続が失われたときにログイン画面に戻るには、どのデザイン パターンを使用すればよいですか?
- チャット アプリケーションの接続状態を制御するのは誰で、このコードはどこに配置しますか? この状態はブートストラップ クラスに含まれますか?
- ITransportClient を永続化インスタンス スコープとして登録し、それを必要とする ViewModel (つまり、ログイン フォームとメイン ウィンドウ フォームの両方) に挿入することで、必要に応じて複数のフォーム コントロールを使用できますか?
インターフェイスは次のITransportClient
とおりです。
SimpleInjector を使用した Caliburn.Micro ブートストラップ コードと共に:
c# - 循環参照を作成せずにマルチ プロジェクト ソリューションで SimpleInjector を使用する方法
Windows サービス、ASP.NET Web サイト、WebApi コントローラーなど、複数のエントリ ポイントを持つマルチ プロジェクト ソリューションを開始しています。SimpleInjector は非常に高速であり、高度なものは必要ないため、SimpleInjector に落ち着きました。特徴。
私の理解では、SimpleInjector は起動時に一元的に構成する必要があります。次のプロジェクトの基本的なサンプル セットから始めます。
- NS.Controllers
- NS.Core.Data
- NS.Core.Data.Model
- NS.Web
- NS.WindowsService (これは常に実行されているとは限りません)
複数のエントリ ポイントがある場合、SimpleInjector のブートストラップはどこに移動する必要があり、一元的に処理できるか/処理する必要がありますか (その場合、構成プロセスはすべてのプロジェクトを参照して、すべてのソリューション クラスを設定できるようにする必要があります)。
他のプロジェクトを参照しないグローバル インスタンス (NS.Global.Container など) を用意する必要がありますか? 各エントリ ポイントは、起動時に独自のインスタンス要件を追加する必要があります (NS.Core.Model などの重複登録を適切に処理します)。
ResolveUnregisteredType イベントを使用して、要求に応じて登録を処理する必要がありますか?
私は単に小学生の知識が不足しているだけですか?
更新しました:
以下のコメントでスティーブンが提供するリンクは、この質問に対する完全な回答を提供します。
c# - Simple Injectorを使用して、親に基づいてインスタンスを返す方法は?
私たちはDIコンテナとしてウィンザー城を使用してきましたが、代替品を探しています。Simple Injectorにたどり着きました。これまでのところ、そのシンプルさに感銘を受けましたが、現在立ち往生しているシナリオの1つは、一部のコンポーネントにレイトバウンドインスタンス化を使用している場合です。
私の最初の質問は、それも可能ですか?
ウィンザーでは、このように行われます。
Simple Injectorで同じことをする方法はありますか?
c# - SimpleInjector で同じセットのシングルトンを使用した複数の RegisterAll 登録
Simple Injector を使用して、e コマース プロジェクト用のプラグイン システムを構築しています。私はaとRegisterAll
a のすべての実装を登録するために使用しています(およびさらに多くの場合)。IPaymentProvider
IResourceRegistrar
しかし、これは毎回新しいインスタンスを作成します。ここでは、RegisterSingle
タイプごとに使用することをお勧めします。しかし、この場合、これをどのように達成するのでしょうか?
container.RegisterSingle(type)
IPaymentProvider
同じインターフェイス (または)に固有の型であるため、機能しませんIResourceRegistrar
。IPaymentProvider
実装クラスには、パラメーターなしのコンストラクター (パラメーターあり) がありIResourceRegistrar
ます。
私はこのようなことをしたくありません。むしろ、IoC コンテナーの目的を無効にします。
これらを醜いスイッチなしでシングルトンとして登録する方法は?
c# - SimpleInjector は実行時にジェネリック型の初期化子を登録できますか?
ジェネリック型の初期化子を実行時に SimpleInjector に登録できますか? (以下のコードの最後の行を参照してください)
c# - シンプルなインジェクターは、ハードコードされた値をコンストラクターに渡します
Simple Injectorでは、次のことができます。
ここで行っているのは、IAuctionContext
が見つかったら、これを新しい に置き換えるということAuctionContext
です。問題は、 の呼び出しでRegisterSingle
、 のインスタンスが 1 つしかAuctionContext
使用されないことです。上記のようにパラメーターを渡すことができるようにしたいのですUri
が、インスタンスは1つではなく、毎回新しいインスタンスを許可します。
これはどのように可能ですか?
unit-testing - Unit of work 依存関係を持つ ApiController のモック
Apicontroller
作業単位オブジェクトに依存している があります。ApiController
コンストラクターで実装された作業単位に依存するモッキング用のテスト ケースの作成方法ApiController
。
コードは次のとおりです。
APIコントローラー:
テストケース:
ここUoW.Usersで言及されているユーザークラスは
Users
クラス自体は
テスト ケースをデバッグしようとすると、テスト ケースはオブジェクトUoW.Users
が で null であることを示しますUserController
。WebActivator
global.asax はここでモックを介して呼び出されないため、初期化されていないことは明らかです。このコンテキストで成功するテスト シナリオを作成してWebApicontroller
、データを含むユーザー オブジェクトを返すにはどうすればよいでしょうか。
c# - SimpleInjectorでさまざまな構成を使用する
Simple Injector Dependency Injectionフレームワークを使用していますが、見た目はかっこよくて素敵です。しかし、構成を構築して使用した後、ある構成から別の構成に変更する方法を知りたいと思います。
シナリオ:グローバルAsaxで構成をセットアップし、そこにパブリックインスタンスとグローバルContainer
インスタンスがあると想像してみましょう。ここで、いくつかのテストを行い、モッククラスを使用してもらいたいので、構成を変更します。
もちろん、別の構成を作成して、デフォルトで作成されたグローバルに割り当てることができるContainer
ので、テストを実行するたびに代替構成が設定されます。しかし、それを行うと、私は開発コンテキストにいますContainer
が、通常の要求であっても、すべての人にとって変更されます。私はこのコンテキストでテストしていることを知っていますが、それは問題ではありませんが、これはこれを行う方法ではないと感じています...そして、ある構成から別の構成に正しい方法で変更する方法を考えています。
c# - Simple Injector:親に基づくコンストラクター引数を使用して型を登録します
現在、プロジェクトからNinjectを削除し、Simple Injectorの使用に移行していますが、正しく機能しないことが1つあります。
私のロギングでは、サービスの登録で、以前はパラメータをロギングクラスにそのまま渡すことができました。
SimpleInjectorでこれを再現する方法を探しています。これまでのところ、これ以外はすべて機能しています。次の手順を実行することで、正しいロガー名が表示されていなくても、ログを機能させることができます。
誰かが似たようなことをした経験はありますか?