問題タブ [unity-container]
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# - IOC コンテナのベスト プラクティス
私は Unity IOC コンテナーを使用していますが、複数のクラスのコンテナーにアクセスするための最良の方法は何だろうと思っています。
すべてのクラスに IUnityContainer メンバーがあり、コンテナーをコンストラクターで渡す必要がありますか? IOC コンテナーを持つシングルトン クラスが必要ですか?
asp.netの開発はどうですか?
誰かが私を正しい方向に導くことができますか? ありがとう。
.net - 属性なしのUnityでのセッター/プロパティインジェクション
UnityフレームワークをIoCコンテナーとして使用するプロジェクトに取り組んでいます。私の質問は、プロパティまたはセッターの注入を使用して、オプションの依存関係(この場合はロガー)をいくつかのクラスに注入することに関するものです。
すべてのクラスのコンストラクターをこれらのオプションの依存関係で乱雑にしたくありませんが、Unityでこれを処理するための良い方法を見つけることができません。これを行う方法は、MSDNのドキュメントによると、プロパティに属性を追加することです。
これはとても醜いです。StructureMapでは、次のようにして、特定のタイプのすべてのプロパティを設定できます。
Unityで同様のことができるかどうか誰かが知っていますか?
編集:
Kim Majorは、このアプローチを使用することを提案しています。これは、コードでも実現できます。
一致するすべてのプロパティに対してこれを自動的に行う方法の例に興味があります。
c# - メインコンテナにタイプを登録し、子コンテナで解決するにはどうすればよいですか?
ユニティコンテナがあり、を使用RegisterType
して次のリポジトリと実装者を登録するために使用しContainerControlledLifetimeManager
ます。
ObjectSpace
このパターンを使用すると、各スレッドが異なるスレッド(DBからオブジェクトをフェッチするためのローカルキャッシュ+メカニズム)を使用しているにもかかわらず、同じリポジトリインスタンスを同時に使用する複数のスレッド(Webアプリ)を持つことができます。作業単位など)。しかし、これは私に「汚い」と感じさせます、そして良い種類ではありません:-)
私が本当に欲しいのは:
これを実現するには、子コンテナを作成し、を使用RegisterInstance
して登録する必要がありますObjectSpace
。これは、私が次のいずれかである限り、正常に機能します。
IPersonRepository
代わりに子コンテナに登録してください- ライフタイムマネージャーをに変更します
TransientLifetimeManager
私もやりたくない。(1)手間がかかりすぎるので、親コンテナに一度登録して、それ以上は登録したくない。(2)は機能しますが、依存関係がたくさんある場合は、これらすべても一時的なものである必要があり、これにより、personリポジトリが必要になるたびに多くのインスタンスが作成されます。
だから私の質問は:親に型を登録する方法はありますが、コンテナの有効期間インスタンスを解決して、親コンテナではなく子コンテナに保存する方法はありますか?たぶん、カスタムライフタイムマネージャーなどを使用する方法はありますか?
私が達成したいのはこれです:
inversion-of-control - シングルトン パターンを使用する IUnityContainer オブジェクトを作成する必要がありますか?
Unity および IoC/DI の概念を使用するのは初めてです。私はテストでdnrTVの James Kovacs の番組を介して独自のコンセプトを展開することから始めました。
彼の例では、IoC クラスの静的メソッドを介してアクセスされるシングルトンとしてコンテナを実行していたため、起動時に型を登録し、アプリケーション全体で型を解決できました。
これはフル機能ではなく、主に IoC の概念を示すためのものでした。
現在、プロジェクトで Unity を使用しようとしています。
Main() で新しいコンテナーを作成しますが、WinForms が開くと、コンテナーは範囲外になり、破棄されます。プログラムの後半で型を解決しようとすると、元のコンテナーとその登録型がなくなります。
欠けている概念または実装構造はありますか?
私の現在の考えは、次のようなものを作成することです。
これはうまくいくと確信していますが、正しくないようです。
nhibernate - NHibernate を使用して Unity インターセプションでプロキシから実際のインスタンスを取得する
Unity を使用して、プラグ可能なアーキテクチャの型を動的に解決しています。また、インターセプトを使用して、AOP を介して ( ValidationAspectsを使用して) ビジネス ルールの検証を適用しています。最後に、NHibernate を ORM として使用してドメイン オブジェクトを保持しています。
AOP が機能するためにはVirtualMethodInterceptor
、インターフェイス インターセプトが NHibernate では機能しないため、 を使用します。ISession
リポジトリ操作用のインターフェースと実際の型の間のキャストを処理するファサードがあります。
NHibernate を介してフェッチされたグラフ内のすべてのオブジェクトが AOP に対して適切にプロキシされるようにするために、NHIInterceptor
実装をInstantiate()
作成し、メソッドをオーバーライドしましたnew()
。次にContainer.Resolve()
、検証が挿入されたプロキシ化されたオブジェクトを取得し、これを NH に返して入力します。これは正常に動作します。
問題は、セッション フラッシュが発生したときに発生します。NHibernate は、グラフに表示されるオブジェクトが実際の型ではなくプロキシ型であるため、動揺します。私たちがマッピングしている方法 (すべてプロパティ経由、すべて仮想) NH は、型チェックをオーバーライドできれば、必要なすべての値をプロキシ経由で取得できるはずです。
私が知る必要があるのは、Unity によって作成され、Interception が有効になっている透過的にプロキシされたオブジェクトが与えられた場合、a) プロキシしている「実際の」インスタンスへの直接参照を取得する方法、または b) NH をオーバーライドして処理するように指示する方法はありますか?実行時に動的に、既知のマップされた型であるかのように、プロキシ型のオブジェクト?
generics - 汎用カスタム コレクション インターフェイスと Unity で iBATIS.NET を使用する
iBATIS.NET でマップされたクラス O/R で、汎用カスタム コレクション インターフェイス (Microsoft Patterns and Practices Unity での注入をサポートするため) を使用しようとしています。これが可能かどうか、また可能であればその方法を知っている人はいますか?
CollectionBase を拡張する SqlDataItemCollection<T> にマップする IDataItemCollection<T> インターフェイスがあります。クラスで IDataItemCollection<T> を使用して、Unity を介してインターフェイスを拡張する他のクラスと SqlDataItemCollection<T> を交換できるようにしたいと考えています。iBATIS.NET マッピング ファイルは具象クラスを直接参照できます。
以下に、コード、データベース、およびマッピングの非常に単純化された例を含めました。私は iBATIS.NET にまったく慣れていないので、現時点ではその使用法を証明したいだけなので、必要に応じてマッピング XML を再調整してください。
どうもありがとう、
ポール
C# コード
SQL Server 2005 データベース
iBATIS.NET mapping.xml
wcf - WCFとUnityでインターセプトを使用する方法
Unityコンテナ内でホストされるように設定されたWCFサービスがあります。このコンテナを使用してメソッドのインターセプトを実行するつもりでした。問題は、インターセプターを発射させることができないことです...
まず、インターセプター属性とハンドラーの定義を次に示します。
私のホストでは、インターセプトを使用しないように構成しようとしました...ヘルプ!!!!
私はここで何が間違っているのですか?
c# - 誰かがMicrosoftUnityを説明できますか?
Unity(依存性注入、制御の反転)に関するMSDNの記事を読んでいますが、簡単な用語(または簡単な例)で説明する必要があると思います。私はMVPCパターン(ここでは使用しています)に精通していますが、このUnityのことをまだ実際に理解することはできず、アプリケーション設計の次のステップだと思います。
c# - Unity: 別の型を解決するときに型の特定のインスタンスを使用するように指定する方法
Unityで次のことを試しています:
次のコンストラクタを持つ型があります
Unityで解決する際、インジェクトType1
する特定のインスタンスを指定したいType2
。のこの特定のインスタンスはType2
コンテナーに登録されていません。Type3
コンテナに登録されており、通常どおり解決する必要があります。
より具体的にType1
は、DocumentViewer
クラスであると考えてください。Type2
は特定のものDocument
です。Type3
ですSpellingChecker
。
実行時にのみ知られているDocumentViewer
aを解決できるようにしたい。Document
異なる複数DocumentViewer
のインスタンスをDocuments
作成できます。
これどうやってするの?