問題タブ [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.

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

c# - シンプルインジェクター非同期ライフタイムスコープとセキュリティ例外

私は以下に示すようにAsyncCommandHandlerDecorator<TCommand>とを持っています:LifetimeScopedCommandHandlerDecorator<TCommand>

そして私はこのようなデコレータを登録します:

しかし、非同期プロセスが呼び出そうとすると、次のエラーが発生します。

セキュリティ透過メソッド「LifetimeScopedCommandHandlerDecorator`1.Handle(!0)」によるセキュリティクリティカルメソッド「SimpleInjector.SimpleInjectorLifetimeScopeExtensions.BeginLifetimeScope(SimpleInjector.Container)」へのアクセスに失敗しました。

との両方でSecurityCritical属性を使用しようとしましたが、役に立ちませんでした。何かアイデアはありますか?LifetimeScopedCommandHandlerDecorator.HandleAsyncCommandHandlerDecorator.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、問題が存在します。

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

mvvm - 自己完結型のクライアント サーバー コードと IoC コンテナーを備えたステートフル MVVM アプリケーションのアーキテクチャ

複数の画面があり、WCF Web サービスと通信するアプリケーションがあります。お気に入りの IoC コンテナーには SimpleInjector を使用し、WPF を使用した MMVM には Caliburn Micro を使用しています。

ITransportClientWeb サービスへの接続を制御し、メッセージを送受信する別のクラス実装があります。

アプリケーションには次の状態があります。

  1. アプリケーションの起動と初期化。
  2. ログインフォームを表示します。
  3. ログインフォームは でチャットサーバーへの接続を行いますITransportClient.Login(username, password)
  4. ログインに成功すると、新しい MainWindow ビューが表示されます。ログインに失敗した場合は、ユーザーに再度資格情報を求めるプロンプトを表示します。
  5. ログインすると、MainWindow は WCF サービスとの間で送受信されるメッセージを制御します。
  6. サーバーとの接続が失われた場合 ( で通知ITransportClientCallback.OnTransportDisconnected)、またはユーザーがログアウトをクリックした場合、ログイン フォームが再度表示されます。

私が利用できるテクノロジと、これが私の最初の MVVM プロジェクトであるため、次のアーキテクチャと設計に関する質問があります。

  1. 別のログイン画面を表示し、接続時にメイン画面を表示し、接続が失われたときにログイン画面に戻るには、どのデザイン パターンを使用すればよいですか?
  2. チャット アプリケーションの接続状態を制御するのは誰で、このコードはどこに配置しますか? この状態はブートストラップ クラスに含まれますか?
  3. ITransportClient を永続化インスタンス スコープとして登録し、それを必要とする ViewModel (つまり、ログイン フォームとメイン ウィンドウ フォームの両方) に挿入することで、必要に応じて複数のフォーム コントロールを使用できますか?

インターフェイスは次のITransportClientとおりです。

SimpleInjector を使用した Caliburn.Micro ブートストラップ コードと共に:

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

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 イベントを使用して、要求に応じて登録を処理する必要がありますか?

私は単に小学生の知識が不足しているだけですか?

更新しました:

以下のコメントでスティーブンが提供するリンクは、この質問に対する完全な回答を提供します。

多層アプリケーションで Ninject モジュールを配置する場所

MVC サイトのクラス プロジェクト部分で Ninject を初期化する方法

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

c# - Simple Injectorを使用して、親に基づいてインスタンスを返す方法は?

私たちはDIコンテナとしてウィンザー城を使用してきましたが、代替品を探しています。Simple Injectorにたどり着きました。これまでのところ、そのシンプルさに感銘を受けましたが、現在立ち往生しているシナリオの1つは、一部のコンポーネントにレイトバウンドインスタンス化を使用している場合です。

私の最初の質問は、それも可能ですか?

ウィンザーでは、このように行われます。

Simple Injectorで同じことをする方法はありますか?

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

c# - SimpleInjector で同じセットのシングルトンを使用した複数の RegisterAll 登録

Simple Injector を使用して、e コマース プロジェクト用のプラグイン システムを構築しています。私はaとRegisterAlla のすべての実装を登録するために使用しています(およびさらに多くの場合)。IPaymentProviderIResourceRegistrar

しかし、これは毎回新しいインスタンスを作成します。ここでは、RegisterSingleタイプごとに使用することをお勧めします。しかし、この場合、これをどのように達成するのでしょうか?

container.RegisterSingle(type)IPaymentProvider同じインターフェイス (または)に固有の型であるため、機能しませんIResourceRegistrarIPaymentProvider実装クラスには、パラメーターなしのコンストラクター (パラメーターあり) がありIResourceRegistrarます。

私はこのようなことをしたくありません。むしろ、IoC コンテナーの目的を無効にします。

これらを醜いスイッチなしでシングルトンとして登録する方法は?

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

c# - SimpleInjector は実行時にジェネリック型の初期化子を登録できますか?

ジェネリック型の初期化子を実行時に SimpleInjector に登録できますか? (以下のコードの最後の行を参照してください)

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

c# - シンプルなインジェクターは、ハードコードされた値をコンストラクターに渡します

Simple Injectorでは、次のことができます。

ここで行っているのは、IAuctionContextが見つかったら、これを新しい に置き換えるということAuctionContextです。問題は、 の呼び出しでRegisterSingle、 のインスタンスが 1 つしかAuctionContext使用されないことです。上記のようにパラメーターを渡すことができるようにしたいのですUriが、インスタンスは1つではなく、毎回新しいインスタンスを許可します。

これはどのように可能ですか?

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

unit-testing - Unit of work 依存関係を持つ ApiController のモック

Apicontroller作業単位オブジェクトに依存している があります。ApiControllerコンストラクターで実装された作業単位に依存するモッキング用のテスト ケースの作成方法ApiController

コードは次のとおりです。

APIコントローラー:

テストケース:

ここUoW.Usersで言及されているユーザークラスは

Usersクラス自体は

テスト ケースをデバッグしようとすると、テスト ケースはオブジェクトUoW.Usersが で null であることを示しますUserControllerWebActivatorglobal.asax はここでモックを介して呼び出されないため、初期化されていないことは明らかです。このコンテキストで成功するテスト シナリオを作成してWebApicontroller、データを含むユーザー オブジェクトを返すにはどうすればよいでしょうか。

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

c# - SimpleInjectorでさまざまな構成を使用する

Simple Injector Dependency Injectionフレームワークを使用していますが、見た目はかっこよくて素敵です。しかし、構成を構築して使用した後、ある構成から別の構成に変更する方法を知りたいと思います。

シナリオ:グローバルAsaxで構成をセットアップし、そこにパブリックインスタンスとグローバルContainerインスタンスがあると想像してみましょう。ここで、いくつかのテストを行い、モッククラスを使用してもらいたいので、構成を変更します。

もちろん、別の構成を作成して、デフォルトで作成されたグローバルに割り当てることができるContainerので、テストを実行するたびに代替構成が設定されます。しかし、それを行うと、私は開発コンテキストにいますContainerが、通常の要求であっても、すべての人にとって変更されます。私はこのコンテキストでテストしていることを知っていますが、それは問題ではありませんが、これはこれを行う方法ではないと感じています...そして、ある構成から別の構成に正しい方法で変更する方法を考えています。

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

c# - Simple Injector:親に基づくコンストラクター引数を使用して型を登録します

現在、プロジェクトからNinjectを削除し、Simple Injectorの使用に移行していますが、正しく機能しないことが1つあります。

私のロギングでは、サービスの登録で、以前はパラメータをロギングクラスにそのまま渡すことができました。

SimpleInjectorでこれを再現する方法を探しています。これまでのところ、これ以外はすべて機能しています。次の手順を実行することで、正しいロガー名が表示されていなくても、ログを機能させることができます。

誰かが似たようなことをした経験はありますか?