問題タブ [ninject-extensions]
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.
dependency-injection - Ninject MVC3を使用してIDBContextFactoryをコントローラーの注入IDomainFactoryに適切に注入する方法は?
予選
- Ninject.MVC3 2.2.2.0 Nuget Package を使用して、Factory アプローチを使用してビジネス ロジック (BL) を分離する IDomain インターフェイスの実装をコントローラーに挿入しています。
以下を使用して、事前構成済みのNinjectMVC3.csに Ninject モジュールを登録しています。
/li>私は悪魔的なService Locatorアンチパターンの致命的な呪いを避けようとしています。
ドメイン クラスは、次のシナリオで、IDBContext を介してインターフェイスの実装も注入しようとしている DBContext を使用します。
IDomainBLFactory :
DomainBLFactory :
コントローラーの名前空間で:
この時点で、Ninject コンストラクター インジェクションを使用して IDomainBLFactory 実装をコントローラーに問題なく挿入できます。
今、私の中心的な問題。
DomainBL の実装では、IDBContextFactory を使用して、特定の DBContext (この場合は Entity Framework からの ADO DBContext) に依存関係を注入します。
IDbDataContextFactory
DbDataContextFactory
ADOモジュール
DomainBL の実装で、DBContext オブジェクト ファクトリに必要なインターフェイスを挿入するという問題に直面しました。
私は何を試しましたか?
コンストラクターを使用するには インジェクション。しかし、IDBContextFactory の Factory CreateNew() の呼び出しに何を挿入すればよいかわかりません。クリアの場合:
この便利な投稿で、私たちの唯一無二の真の友人であるRemo Gloorは、次のように引用して、私にとって可能な解決策をコメントで説明しています。このインターフェイスを実装し、そのコンストラクターに IResolutionRoot を追加し、このインスタンスを使用して必要なオブジェクトを取得します。
質問: Ninject.MVC3 と控えめなドメイン クラス アプローチを使用して、これを適切な方法で実装するにはどうすればよいですか? Service Locator アンチパターンでの中継で罰せられることなく IResolutionRoot を解決するにはどうすればよいですか?
IDBContexFactory のプロパティ インジェクションを使用するには。矛盾するすべての観点とそれに関する理論的な説明を学び、読む過程で、DBContexFactory クラス コードのインジェクションを行う適切な方法ではないと推測できます。どうでも。とにかくうまくいきません。
質問:何が欠けていますか? このアプローチが間違っていたとしても、プロパティは注入されていません。
呪われよ。DependencyResolver を使用して、スティグマと共に生きてください。これは機能し、適切な解決策が見つかるまでこのアプローチを続けます。この 10 日間、物事を正しく理解して実行しようとしても知識が不足していたので、これは本当にもどかしいものです。
質問:インターフェイス化された実装を注入するためのファクトリ アプローチと、ビジネス ロジックを分解するためのドメイン駆動型アプローチの使用についての私の理解に大きな間違いはありますか? 私が間違っている場合、どのパターンのスタックを自信を持って実装する必要がありますか?
私は、この重要な問いを率直に明快に問うていない非常に大量の記事やブログを見てきました。
Remo Gloorは、www.planetgeek.ch/2011/12/31/ninject-extensions-factory- introduction で Ninject 3.0.0 RC 用の Ninject.Extensions.Factory を紹介しています。
質問:この拡張機能は、一般的なポーパス用の Ninject.MVC3 と組み合わせて機能しますか? そうすれば近い将来の希望になるはずです。
皆様のご指導に感謝いたします。多くの人がこのシナリオも役立つと思うと思います。
ninject - 派生タイプにファクトリを注入する
次のリンクでNinjectFactory拡張機能を見ています: http ://www.planetgeek.ch/2011/12/31/ninject-extensions-factory-introduction/
私は頭をエクステンションに巻き付けて、それが実際に私がやろうとしていることに適合するかどうかを確認しようとしています。
ファクトリエクステンションは、渡されたパラメータに基づいてさまざまなタイプを作成できますか?
例:
私がしたいのはこれです:
この拡張機能はこれを行うことができますか、それともこれは実際には意図された用途の1つではありませんか?
asp.net-mvc - ASP.NET MVC3 で Ninject.Wcf を使用します。NinjectWcfApplication から派生すると、アプリケーションが無効になります
ASP.NET MVC3 アプリケーションで AJAX 対応の Web サービスを使用しており、いくつかのクラスをそれらに挿入したいと考えています。したがって、NInject.Wcf をインストールし、ファクトリを に設定し Ninject.Extensions.Wcf.NinjectServiceHostFactory
、次のステップは からアプリケーション クラス ( MVCApplication
Global.asax 内) を派生させることですNinjectWcfApplication
が、これを行うと、IIS はアプリケーションの実行を停止し、リクエストをルーティングするのではなく、StaticFile モジュールを使用しようとします。コントローラ。
これを修正する方法、または他の方法で WCF を使用して NInject を実装する方法は?
ninject - ChildKernelにActivationExceptionを挿入します
IEventBrokerのアクティブ化中にエラーが発生したというActivationExceptionが発生します。MyDataSourceは、IEventBrokerにパラメーターがあります。子カーネルを使用しなくても問題ありません。何が起こっている?
asp.net - WebFormsアプリケーションでNinjectロギング拡張機能を備えたlog4netを使用する
苦労した後、Ninjectロギング拡張機能とlog4netをロギングフレームワークとして使用するASP.NETWebフォームアプリケーションを機能させることができました。(基本については、このブログのクレジット)。しかし、続行する方法についていくつか質問があります。
まず、ILoggerプロパティをパブリックにする必要がありました。これは、プライベートまたは保護されている場合はnullのままであるためです。だから今私はこれを持っています:
それ以外の:
私はそれと一緒に暮らすことができますが、それは奇妙に思えます。
もう1つは、log4netが現在のコンテキストを埋めるために使用するThreadContextです。私はまだこのようにそれを使うことができます
しかし、私が追加したばかりの抽象化をすべて取り除くオフコース..したがって、他の人がこのシナリオで持つ可能性のあるいくつかの経験/ベストプラクティスを探しています。
追加の質問:log4netをNuGetの現在のバージョンである1.2.11.0にアップグレードしましたが、バージョン1.2.10.0を想定しているため、Ninject.Logging.log4netが壊れています...これを修正する方法はありますか?
dependency-injection - Ninject 3.0.0 による規約ベースの依存性注入
私のソリューションには、ドメイン プロジェクトと MVC3 Web プロジェクト (例: MyApp.Domain と MyApp.Web) の 2 つのプロジェクトがあります。以前は、Ninject.Extensions.Conventions ver. 2. NinjectMVC3.cs ファイルで次のステートメントを使用でき、ソリューション全体 (Web とドメインの両方) に必要な依存関係が適切に挿入されました (たとえば、IFoo は自動的に Foo にバインドされました)。
Ninject 3.0.0 (プレリリース) と Ninject.Extensions.Conventions 3.0.0 (別のプレリリース) にアップグレードしましたが、規約ベースのバインディングの構文が変更されました。新しいバージョンで次のステートメントを使用できることがわかりましたが、MyApp.Domain ではなく、MyApp.Web の規則ベースのインターフェイスのみを自動的にバインドします。以前のバージョンでは、アプリケーション全体でインターフェイスがバインドされていました。
新しい Ninject バージョンで規則ベースのバインディングを構成する方法の手がかりはありますか? アセンブリの指定に関係していると思いますが、使用FromAssembliesMatching("*")
してみましたが、すべて失敗します。
-- RegisterServices メソッドで既存のコードを表示するように編集します。 --
ninject-2 - ASP.NET Web API(セルフホスト)+Ninject-デフォルトのバインディング
プロジェクトをWCFWebAPIからASP.NETWebAPIに変換しています-MSに感謝します:(
セルフホスティングPOCコード:
Ninjectを依存関係リゾルバーとして登録しています。これを達成するために、私はCommonServiceLocator.NinjectAdapter
それを登録するために使用しています:
SetResolver(object)を使用すると少し汚れた感じがしますが、私が知る限り、これは機能しているようです。
私が今抱えている問題は、それを実行しようとすると、登録されなくなったバインディングがたくさんあることです(つまりIHttpContollerFactory
、ILogger
など)。
1つずつ確認して、すべての「デフォルト」の依存関係を再登録する必要がありますか?デフォルトがデフォルトの依存関係リゾルバーに登録されているのは奇妙に思えますが、新しい依存関係リゾルバーが設定されたときにデフォルトを再登録する簡単な方法がわかりません。のようなものの場合、バインディングを作成するためILogger
にデフォルトにアクセスすることさえできないようです。System.Web.Http.Common.Logging.DiagnosticLogger
私は何かが足りないのですか?
ninject - NinjectFactoryカスタムインスタンスプロバイダー
Ninject Factory Extensionを使用しており、wikiで説明されているカスタムインスタンスプロバイダーを作成しています。
次のファクトリインターフェイスを定義しました。
次のバインディングを作成しました。
次を呼び出すと、次のインスタンスが表示されますFooBar
。
これはすべてうまくいきます。しかし、私が欲しいのはもう少しこのようなものです:
名前( "Foo")に基づいてテンプレートを返すリポジトリがあり、そのテンプレートをコンストラクター引数として渡したいと思います。
これは可能ですか?ITemplateRepositoryに何が依存しているのかわかりません。
asp.net-mvc - ASP.NET MVC3 プロジェクトでポリモーフィック オブジェクトを作成する
私の質問の本質は、MVC3 と Ninject を使用してこれらのオブジェクト (以下を参照) を賢明な方法で構成する方法です (ただし、DI がソリューションで役割を果たすべきかどうかはわかりません)。私のプロジェクトの実際の詳細を開示することはできませんが、問題/質問を説明する近似値を次に示します。VB または C# での回答を歓迎します。
さまざまな特性を持ついくつかの異なる製品がありますが、それらすべてをカタログに表示する必要があります。データベースには、各製品クラスに対応するテーブルがあります。カタログ エントリには、カタログ エントリであることに固有のいくつかのプロパティがあり、その結果、独自のテーブルがあります。DescriptionText プロパティを呼び出すと、基になる具象型に基づいて非常に異なる結果が得られるという意図で、カタログ エントリのインターフェイスを定義しました。
DescriptionText がプレゼンテーション層の問題であることを考えると、製品クラスに ICatalogEntry インターフェイスを実装したくありません。代わりに、それをある種のフォーマッターに委任したいと思います。
コントローラーのどこかに、次のようなコードがあります。
どこかのビューには、次のようなコードがあります。
問題は、コンストラクターがどのように見えるかということです。適切なオブジェクトが適切な場所でインスタンス化されるように設定する方法。ジェネリックまたは DI がこれを助けることができるようですが、私は精神的なブロックを抱えているようです. 私が思いついた唯一のアイデアは、ProductType プロパティを ICatalogEntry に追加し、次のようなファクトリを実装することです。
私見ですが、新しい製品クラスが登場するたびにファクトリを変更する必要があることを除けば、このコードから臭いを感じることはありません。それでも、私の直感では、これは古い方法であり、最近では DI やジェネリックがこれをより適切に行うことができると言っています。これを処理する方法に関する提案は大歓迎です (より良いタイトルに関する提案も同様です...)
ninject - Ninject Interception - Ninject 3.0 への移植時の破壊的変更
私の環境について説明します。Ninject + Ninject Interception Extension を使用して、特別な属性でマークされたすべてのメソッドのインターセプターの自動登録を有効にしています。これは、一般的な AoP + 属性 + DI コンテナーのシナリオです。
私の問題は次のとおりです。Ninject および Ninject Interception Extension - 3.0 の最新バージョンに移植すると、インターセプターが実行されるはずのときに例外が発生し始めます。私の InterceptorRegistrationStrategy は、属性付きの型を解決してインターセプターを登録するときに正常に機能します。ただし、傍受されたメソッドを実行すると、次の例外が発生します。
私はReflectorに頼り、Ninject Interception Extensionソースを使用してこの問題を解決しなければなりません。十分なドキュメントがなく、悪い立場に置かれています。
Ninject 3.0 への移植時に同じ例外が発生した人はいますか?
属性に基づいてインターセプターを自動的に登録するために使用するコードは次のとおりです。