問題タブ [light-inject]
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.
asp.net - Ninject から LightInject への移行中に Web アプリのパフォーマンスが大幅に向上しない
実稼働 Web アプリケーション (ASP.NET MVC) があります。このアプリケーションは 2 年前に開発され、Ninject を DI コンテナーとして使用しました。
パフォーマンスの結果を見て、Ninject を LightInject に置き換える動機が生まれました。以前に他の小さな Web アプリケーションでそれを行ったことがあるので、技術的な障害はないと確信していました。
別のコード ブランチで変更を行い、Ninject を LightInject に置き換えることに成功しました。Web アプリケーションは、LightInject を DI コンテナーとして使用して適切に実行されています。
ここで興味深い部分が来ます。私たちは何を得たのでしょうか?
そこで、(非科学的な) パフォーマンス分析をすばやく実行することを考えました。そこで、開発ボックスでPrefix (素晴らしいツール) を使用し、両方のバージョンの Web アプリを手動で実行してタイミングをキャプチャしました。最初の実行と平均時間を無視して、各ページを 10 回実行しました。
結果はそれほど有望ではなく、なぜだろうと思いました。
これらの結果には、次の可能性があると思います。
- 測定された UI ページの数が少ない。
- 使用されるパフォーマンス測定手法は手動であり、科学的ではありません。
- Web アプリで DI コンテナーを使用した方法では、Ninject を使用するか LightInject を使用するかはあまり重要ではありません。この場合、交換は行いません (交換はアプリケーション全体に影響するため)。これを確立するには、より科学的な結果が必要です。
サーバーで Prefix を使用することを考えましたが、AWS Elastic Beanstalk でホストしています。
この場合、LightInject に切り替える価値があるかどうかを確認するために、いくつかのパフォーマンス マトリックスが必要です。
これに関する提案はありますか?
c# - パラメータ付きの LightInject 型付きファクトリ
LightInject のドキュメントに従って、型付きファクトリを作成し、次のように値を渡すことができます。
そして、次のように登録します。
そして、次のように GetFoo を呼び出すことができます。
だから今私の質問は次のとおりです。工場の新しい Foo(value) を登録するときに、明示的に foo をインスタンス化します。しかし、値に基づいて GetFoo メソッド内でそれを実行したい場合はどうなるでしょうか?
GetFoo を呼び出して、「値」に基づいて適切な実装を取得できるようにしたいと考えています。
light-inject - lightinject を使用すると、サービスは常に null になります
リクエストごとに利用できるベースコントローラーにいくつかのサービスを登録しようとしています。
次に、これらの具体的な実装がいくつかあります
次に、このサービスも登録したいベースコントローラーがあります。
したがって、アプリの起動時にこの初期化があります。
しかし、InstagramApiService
オンを確認すると、BaseController
常にnull
. InstagramApiService
コントローラー内で常に使用できるように、これを設定する正しい方法は何ですか?
c# - LightInject は継承されたジェネリック型を解決しません
LightInject と MediatR を使用して汎用リクエスト ハンドラーを作成しようとしています。基本的に、次のようなタイプがあります。
そしてHandler
、次のように自分の型を LightInject コンテナに登録しました。
しかし、メディエーターを呼び出して の実装を試みると、IAsyncRequestHandler<InheritedType,SomeResponseType>
失敗します。実装Handler
以来、登録を取得することを期待していたでしょう。InheritedType
SomeType
ここで何か間違ったことをしていますか、または上記の動作を LightInject で実現する方法はありますか?
不明な点がある場合はお知らせください。詳しい情報を提供できるよう努めます。ありがとう!
c# - MVC5 および .Net 4.5 で LightInject を使用するとメソッドが見つかりません
MVC コントローラーの LightInject をセットアップするときcontainer.EnableMvc();
に、インジェクターのセットアップを呼び出すときにエラーが発生します。
エラー:
メソッドが見つかりません: 'Void LightInject.WebContainerExtensions.EnablePerWebRequestScope(LightInject.IServiceContainer)'
ソース:
追加情報:
- Visual Studio を使用してコードをローカルで実行しています
- プロジェクトは4.5
- 私のOSはWindows 10(フレームワーク4.5)です
過去に LightInject をセットアップしたとき、スコープの有効期間を手動で設定しましたが、一般的なセットアップと MVC 固有の例に関するドキュメントはその後変更されました。LightInject.Web を dep として含めないと問題になる可能性があると述べた 1 つのスレッドに出くわしましたが、LightInject.MVC の dep としてリストされ、プロジェクトの参照リストに表示されます。
MVC を有効にする前に、ライフタイムを手動で構成するか、このメソッドが使用可能であることを確認するために実行できる他の手順はありますか?
c# - lightinject を使用して、xml ファイルまたは web.config で依存関係を解決します。
lightinject を使用する場合、外部構成ファイルの文字列値を使用して、ファイルに記載されているサービスを登録するようコンテナーに指示する方法はありますか? これは、xml ファイルまたは web.config ファイルにあります。
たとえば、私の web.config の以前のプロジェクトでは、次の行があります。
WebConfigurationManager 呼び出しで値を取得できました。この例では、具象クラス PersonRepository.Db.DbRepository 名を文字列として取得し、依存関係の解決に使用できます。これは私が過去に使用した方法ですが、lightinject で同じことを行う方法がわかりません。これは可能ですか?
これが少し混乱している場合はお詫びします。これは、依存性注入への私の最初の適切な進出です。
どうもありがとう。
またあったね。あなたが説明した方法を数日間実装しようとしましたが、うまくいきませんでした。これを簡潔に説明します。
コンパイラからエラーが発生します 'stringType' は変数ですが、型のように使用されます。
ここでさらに読むと;
Generic のテンプレートとして typeof または GetType() を使用するには?
これは言語の制限のようです。何か考えはありますか?どうもありがとう。
asp.net-mvc-5 - ASP.NET MVC 5 と LightInject
現在のプロジェクトで LightInject を使用しようとしていますが、null 値を取得し続けます。MVC 5 の Web アプリとそれに関連付けられたビジネス層があります。Web プロジェクトにLightInject.MvcとLightInject.Webをインストールしました。ビジネス プロジェクトにLightInject.Mvcをインストールしました。
ビジネス層には、compositionRoot.cs ファイルがあります。
次に、Web プロジェクトの Global.asax.cs で、app_start メソッドに次のように記述します。
最後に、コントローラーのコードは次のようになります。
コードがRegisterUserCommandを使用しようとすると、基本的にコントローラーで null 例外が発生します。インターフェイスに遭遇すると、LightInject が自動的にコードを挿入すると仮定しました。私は何が欠けていますか?
asp.net-core - ASP.Net Core Dispose と Per Request の有効期間
だから私は、API レイヤー、サービス レイヤー (ビジネス ロジックを考える)、およびその周りのすべての適切なサポート レイヤーを利用する単純なプロジェクトに取り組んでいます。以前は、コントローラーがスコープ外になったときに、Web Api 2 要求が破棄階層を開始すると考えていました (したがって、API から呼び出され、クラスのデータ メンバーであったサービスは、後続のリポジトリ/依存関係と共に破棄されました)。 .
コアでは、base.dispose() を呼び出す単純なメソッド オーバーライドを実行すると、コントローラから dispose が呼び出された場所を確認できます。ただし、私のサービスは廃棄プロセスを開始しているようです。LightInject の PerRequestLifetime スコープを使用して廃棄可能なリソースを取り除くのに行き詰まっています。これはコアとの違いですか?通常、トランジェントは私が期待する動作を私に与えました (controller.dispose() が呼び出されると、依存関係の破棄呼び出しが行われます)。私が行った以前の作業では、Unity IC コンテナーを使用していたことが完全に開示されています。
最終的には、コントローラーの dispose メソッドをオーバーライドして service.dispose() を呼び出すのと同じ結果になると思いますが、コア コンテキストでの LightInject トランジェントの動作には驚かされます。
これが私のリポジトリで、コード例はhttps://github.com/napalm684/ReciPiBookCoreです。
ここでの主な焦点はもちろん、UnitOfMeasureController と UnitOfMeasureService です。DI レイヤー (具体的にはhttps://github.com/napalm684/ReciPiBookCore/blob/master/src/ReciPiBook.Di/ServiceContainerExtensions.cs ) は、サービスの LightInject 登録作業を見つける場所です。
登録
コントローラ
サービス