NHibernate 2.0.1GAで使われているActivator.CreateInstance()の呼び出しを、エンティティを構築するために置き換える方法はありますか?理想的には、それをStructureMap.ObjectFactory.GetInstance()に置き換えたいと思います。NHibernateのActivator.CreateInstance()への呼び出しを置き換えることはできますか?
答えて
これはコンストラクタインジェクションでは簡単に実行できません。 Hibernate内部では、ドメインクラスから継承したLazyローディングコードなどを継承したプロキシオブジェクトを作成する必要があります。私の知る限り、オブジェクトの構築をオーバーライドする単純なオプションはありません。
あなたはですが、プロパティセッター注入を介してオブジェクトを構築するインターセプターを書くことで、かなり簡単にNHibernateで動作する依存性注入を取得します。このhereの例があります。この例ではDIコンテナとしてWindsorを使用していますが、もちろんStructureMap-here are the relevant docs for StructureMapで同じことを行うことができます - 「Setter Injectionを既存のオブジェクト(BuildUp)に適用する」を参照してください。
警告:ドメインモデルへの依存関係を注入することは、設計上の問題の症状としてよく見られます。多くの人がこれを避けるため、コーディングを開始する前にこれを実行してください。
あなたはIInterceptorを実装し、Objectfactory.BuildUpを使ってonloadメソッドで注入を行うことで、setterinジェネレーションを行うことができます。これは簡単に実装することができますが、セッター注入はあなたが望むものではないかもしれません。
独自のIBytecodeProviderとReflectionOptimizerを実装して、コンストラクタインジェクションを実行できます。これは少し難しいですが、可能です!
実体に物を注入することはお勧めしません。ケースの99.9%で、これはデザインが悪くなり、デザインのレイヤーを不可能にします。たぶんあなたは、それが正しいことであるケースの0.01%に直面するかもしれません。 goto文を入力するのと同じくらい頻繁に行うことです。
this post from Fabio Maulo(現在のNHibernate lead dev)を見てください。数ヶ月前にこれを解決しました。このコードはNHibernate 2.1用ですが、IProxyFactoryFactoryの部分を削除することで2.0.1GAにバックポートすることができると思います。
- 1. ポインターは最後のポインター呼び出しで置き換えられますか?
- 2. hrefをjs関数呼び出しに置き換えます。
- 3. emacs regexp C関数呼び出しを置き換えます。
- 4. 特定の関数呼び出しを "置き換える"
- 5. 現在のプロセスをサブプロセスの呼び出しに置き換えますか?
- 6. Scala IntelliJの警告「動的呼び出しをコンストラクターの呼び出しに置き換えることができます」
- 7. &で置き換えることはできますか? C++で
- 8. システムオープンファイルダイアログを置き換えることはできますか?
- 9. ajax呼び出しを検索して置き換えますか?
- 10. jquery ajaxの呼び出しでremoteFunctionの呼び出しを置き換える方法
- 11. REST呼び出しをGraphQLに置き換えよう
- 12. テキストファイル内の1つの単語を置き換えることはできますが、別の単語を置き換えることはできますか?
- 13. メソッド呼び出しを別のものに置き換えます
- 14. DispForm.aspxへのリンクをSharePointのjavascript関数呼び出しで置き換えます。
- 15. UICollectionViewDelegateFlowLayoutを反応(RxSwift)呼び出しで置き換える方法は?
- 16. Ajaxを呼び出すと、単一引用符jqueryを置き換えます。
- 17. 内部HTMLをjavascript呼び出しで置き換える際のエラー
- 18. この継承をコンポジションに置き換えることはできますか?
- 19. android-onPostInitCompleteは、getRemoteServiceへの呼び出しごとに1回だけ呼び出すことができます
- 20. ダミーの代替と置き換えてモック関数を呼び出す
- 21. .NET 4 ISet <> HashSet <>はNHibernate Iesi.Collections ISet、HashSetを置き換えることができますか?
- 22. クラスのインスタンスをJavaScriptで置き換えることはできますか?
- 23. 'on'を使用するJqueryプラグインの呼び出しを置き換える方法はありますか?
- 24. リストに値を置き換えることができない最後の値を置き換えること
- 25. PHPソースコード内の関数呼び出しを安全に置き換える
- 26. ダッシュ文字を疑問符(Ajax呼び出し)に置き換えました
- 27. このコードでは、Collection.size()を使用してカウンタを置き換えることはできますか?ここ
- 28. Activator.CreateInstanceをInterfaceで使用することはできますか?
- 29. ViewStateを隠しフィールドに置き換えることはできますか?
- 30. system.jsでrequire.jsを置き換えることができます
コンストラクタの注入が可能です – Paco
私はそれが不可能だとは言わなかった、簡単ではないと私は言った。私が間違っているなら、私に教えてください:) –
それから私はよく読んでいません。ごめんなさい。 – Paco