問題タブ [funq]
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.
memory-leaks - ServiceStack Funq Container WeakReference の急増
私は最近、大量のスループット (1 日あたり 6,000 万以上のリクエスト) を処理する小さなサービスを作成しましたが、メモリの問題が発生しています。最初に、非常に有用な非常にパフォーマンス指向の ServiceStack ライブラリに関係するものではなく、私が書いたものでなければならないと確信していた通常の容疑者をすべて調べました。しかし、運用サーバーで !dumpheap -stat に windbg を使用すると、驚いたことに、メモリ内のオブジェクトの大部分が System.WeakReference 型であり、!gcroots が ServiceStack の Funq コンテナーを指していることがわかりました。
私は自分のサービスで IoC 化されたデータ構造を使用していないので、なぜこれが起こっているのか疑問に思っていました。何かを間違って初期化していますか? 私の apphost 初期化クラスは、アセンブリと名前の情報を使用して基本コンストラクターを呼び出すだけで、Configure メソッドをまったくオーバーライドしません。
Visual Studio が「エディット コンティニュ」デバッグ オプションをオンにしてバイナリをコンパイルしているため、まれに System.WeakReference オブジェクトが .NET によって挿入されることがよくあることを他の場所で読みましたが、私の VS でそれをオフにしても効果はありません (おそらくSS バイナリは既にコンパイルされており、私のプロジェクトで参照されているだけです)。
他の誰かがこの問題を抱えたことがありますか?
c# - ServiceStackとFunq.Containerを使用してILogを解決するにはどうすればよいですか?
ServiceStack AppHostは、サービスの構築時にサービスに注入できるタイプを登録するためのFunq.Containerを提供します。このコンテナを使用して、それが存在するタイプに適したILogを返すILogファクトリを登録できますか?
別の言い方をすれば、次のAppHostが与えられます。
そしてサービス:
すべてのサービスで静的ILogボイラープレートを回避するためにAppHost.Configureに追加できるものはありますか(代わりに、単純な古いILogプロパティを使用します)?
3つ目の方法として、最も簡潔に言えば、LogManagerの代わりにFunq.ContainerをILogインジェクションに使用できますか?
servicestack - ServiceStack-依存関係が注入されていないようですか?
私は次のリポジトリクラスを持っています:
それから私のAppHost.Configure()
。私は次のように依存関係を登録します:
しかし、アプリケーションを実行するとDbFactory
、null参照例外が発生するため、nullであり、適切に挿入されていないように見えます。
c# - コンテナによってコンストラクタに設定されていないプロパティ
ServiceStackで作成された Service があります。デフォルトで ServiceStack に付属しているため、依存性注入に Funq を使用していますが、これは他の DI コンテナーで見られる動作である可能性があります。
起動時にタイプを登録します。
クラスにこのコンストラクタがあります:
そして、私の具体的な実装のコンストラクターは次のとおりです。
すべてが正常に解決され、コードにステップインして、期待どおりに動作することを確認できます。ただし、AbritraryProperty
正しく設定されません。ステップスルーして、文字列値に設定されていることを確認できますが、コードが呼び出し元のコード (この例では、のコンストラクターExampleService
)に戻るとすぐにArbitraryProperty
null になります。
- この動作は設計によるものですか?
- 設計によるものである場合、DI を使用することは、具体的な実装のコンストラクターで何もするべきではないことを意味しますか?
- 仕様によるものである場合、自動プロパティのデフォルト値を設定する正しい方法は何ですか?
- 設計によるものではない場合、何が起こっているのでしょうか?
.net - 自分のプロジェクトでServiceStackFunqを使用する方法
仕事では、ServiceStackでいくつかの新しいWebサービスプロジェクトを実行しており、そのうちのいくつかでFunqを利用しています。私は現在、上記のWebサービスを使用する別のプロジェクトに取り組んでおり、プロジェクトでServiceStackのFunqを使用して、依存関係を解決し、多かれ少なかれ同じパターンを使用する方法があるかどうか疑問に思っていました。 Webサービスの開発。
これは可能ですか?
http-headers - コンテナーから IHttpRequest または IRequestContext にアクセスする
着信要求の HTTP ヘッダーの値に基づいて、サービスの依存関係を解決する必要があります。
次のようなファクトリメソッドを登録しようとしました:
また、私は試しました:
ただし、どちらも s をスローしResolutionException
ます。
どの実装を使用するかを決定する際に、サービスに負担をかける必要はありません。IDependency
コンストラクターに を入れて、コンテナーに解決させてもらいたいだけです。
これを行う方法はありますか?または、これについて別の方法がありますか?
servicestack - ServiceStackのFunqスコープ(ベストプラクティス)
私のWebアプリケーションでは、依存関係をAppHost.csに解決するための標準メカニズムを使用しています
public virtual void Configure(Container container){ }
この方法では、すべての依存関係を登録します。
コントローラからコンテナインスタンスにアクセスするにはどうすればよいですか?
私は答えを見つけます:ServiceStackでのFunqの使用法
しかし、それはベストプラクティスですか?マルチスレッドについてはどうですか?それ(AppHostBase.Instance.Container)はブロッキングリソースではありませんか?
nunit - NUnit + ServiceStack の Funq AutoWire の問題
ServiceStack 3.9.38 プロジェクトでビジネス ロジックをテストしてきましたが、単体テストを個別に実行すると成功し、テストをまとめて実行するとそのうちの 1 つが失敗するという問題に直面しました。数時間後、再現可能な単体テストを作成しました。フィクスチャ全体を実行すると、2 番目のテストは失敗します。テストを個別に実行すると、合格になります。
それは Funq.Container 構成の問題ですか? それともこれはバグですか?回避策はありますか?
編集: GitHub に問題を投稿しました: https://github.com/ServiceStack/ServiceStack/issues/521
.net - 子コンテナの Funq と破棄
Windows サービスで Funq を使用していくつかのスケジュールされたタスクを実行しています。各ラウンドでは、すべてのオブジェクトを作成するよりも子コンテナーを作成しており、最後に子コンテナーを破棄しています。この子コンテナーによって作成された要素は GC ではないことがわかりました。ルート コンテナには、子コンテナの破棄を呼び出した後もそこにとどまる子コンテナのコレクションがあります。このコードは問題を再現し、800MB のメモリを消費 (および保持) します。
私たちにとっては非常に驚きました。このように funq を使用するのは間違ったパターンなのでしょうか?この場合、どのように使用すればよいのでしょうか? それとも単なるバグですか?
ありがとう
dependency-injection - RegisterAutoWired と RegisterAutoWiredAs で同じ具象クラスを登録する
私の質問は非常に簡単です。インターフェイスと具象型ごとにすべての実装を登録する必要があります。
デフォルトのシングルトン ライフサイクルを使用しています。それらが同じインスタンスに解決されることを確認したいのですが、私のテストでは、最終的に 2 つのインスタンスになることが示されています。
ここで単一のインスタンスを使用する方法はありますか?