問題タブ [iinterceptor]
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.
database - NHibernate IInterceptorの実装(元のドメインクラスにないプロパティをDBテーブルに追加します)
特別なプロパティを持つドメインクラスを拡張せずにNHibernateを介してエンティティを更新/挿入するときに、いくつかの特別な列値を設定するにはどうすればよいですか?
例:私の場合、オブジェクトを取得し、データベースを更新/挿入する直前に、IInterceptorを使用してそのオブジェクトにいくつかの追加情報(ユーザーIDやコンピューター名など)を追加します。つまり、元のオブジェクトのクラスに新しいプロパティを指定せずに、DBテーブルにいくつかの列を追加したいと思います。その場合、自分Object.hbm.xml
またはApp.configに構成/変更/追加する必要がありますか?
問題は、元のオブジェクトと基本クラスを変更できないことです。したがって、元のオブジェクトを変更せずに(基本クラスから継承していなくても)、可能であればDBテーブルに情報を追加する必要があります。
例:
元のオブジェクトには:FirstName ,LastName,Birthday,Address properties
Customer.hbm.xml
もっている:
私のInterceptorクラスには次のメソッドがあります。
その時点で、または保存する前に、DB Customerテーブルに追加の2つの列(たとえば、コンピューター名とユーザー名)を追加する必要があります。これらの列propertyNames[]
とstate[]
パラメーターには最初からそれらがないため、その場で実行する必要があります。
MY DB Customerテーブルには、上記で説明したすべての列があります。
ありがとうございました。
c# - Castle.Windsor インターセプターで AllTypes を登録する
以下が LogAspect で IBusinessService への呼び出しをインターセプトしないのはなぜですか?
Component.For 構文を使用して IBusinessService の各実装を登録すると、機能します。
nhibernate - NHibernateはインターセプターにマップされていない列を追加します
NHibernateを使用してマップされたエンティティを保存しようとしていますが、基になるテーブルにnullを許可しない列があり、ドメインオブジェクトにマップされていないため、データベースへの挿入が失敗します。マップされていない理由は、問題の列がレガシーアプリケーションをサポートしており、アプリケーションとの関連性がないためです。したがって、レガシープロパティでエンティティを汚染したくないのです。
クラス内でプライベートフィールドを使用できることはわかっていますが、それでも私には不快感を覚えます。NHibernateインターセプターを使用し、OnSave()メソッドをオーバーライドして、エンティティが保存される直前に新しい列を追加できることを読みました。Nhibernate.type.ITypeのインスタンスをインターセプターのOnSaveのtypesパラメーターに追加する方法がわからないため、これは難しいことがわかります。
私のエンティティは大まかに次のようになります。
そして私のインターセプター
誰かがこれを適切に行う方法について何かアイデアがありますか?
target - Castle DynamicProxy2:インターセプター内にターゲットを取得しますか?
Castle DynamicProxy2を使用して、ディクショナリからフィールドを取得するためのインターフェイスを「タックオン」しています。たとえば、次のクラスがあるとします。
次のインターフェイスをインターフェイスプロキシとして使用して、Fieldsディクショナリから「Name」値を抽出したいと思います。
インターセプターから、「ターゲット」DataContainerを取得し、「Name」値を返します。
根底にあるターゲットを取得する方法についての考え
注:これは、私が持っている質問の前後関係を確立するために使用している不自然な例です。
nhibernate - オブジェクトのフィルタリングOnLoadNHibernateIInterceptor
NHibernateを使用してオブジェクトをロードする際に問題が発生しました。これらのエンティティには、存在しなくなったファイルへの参照があります。NHibernateがこれらのエンティティの「Path」プロパティを割り当てると、これらのエンティティはファイルをロードしようとしますが、その結果、例外が発生します。例外により、ロードトランザクションは完全にロールバックされます。
パスが設定された後もファイルをロードし続けるように、エンティティを変更しないでおく必要があります。DBからロードしている場合、これらのエンティティをスキップして、プロジェクトの残りの部分をロードしたいと思います。
私はこれを行うためにIInterceptorを使用することを考えていました。基本的に、ファイルベースのオブジェクトをロードする前にフィルタリングしたいと思います。
同様の問題について、そして私の「解決策」が実行可能で可能かどうかについての考えを聞きたいです。
あいさつ、Martijn
c# - 流暢なインターフェイスを備えたキャッスル インターセプター
作成したインターセプターを動作させようとしていますが、何らかの理由で、コンポーネントを要求したときにインターセプターがインスタンス化されていないようです。私はこのようなことをしています(これが完全にコンパイルされていない場合は許してください。しかし、あなたはアイデアを得る必要があります):
インターセプターのコンストラクターにブレークポイントを設定しましたが、まったくインスタンス化されていないようです。
以前は、XML 構成を使用してインターセプターを登録していましたが、流暢なインターフェースを使用したいと思っています。
どんな助けでも大歓迎です!
generics - インターセプターを追加した後の「生成された」メソッドへのWindsor呼び出しの問題
WindsorforIoCを使用して正常に動作していたアプリケーションがあります。Windsorによってインスタンス化されたコンポーネントに対して行われたすべての呼び出しのメソッド呼び出し、パラメーター、および実行時間をログに記録したいので、IInterceptorを実装するLoggingInterceptorを実装しました。
これで、以前は正常に機能していた操作で、次のメッセージが表示されたVerificationExceptionsがスローされます。
メソッドRepositories.RepositoryBase.GetAll:型引数'ET'は型パラメーター'ET'の制約に違反しています。
メソッドのシグネチャは次のとおりです。
(EntityBase2とIEntity2はLLBLGenProからのものです)
メソッドの呼び出し元は次のとおりです。
(GetRepository <>()はServiceLocatorの単なるラッパーです)
城の構成からインターセプターをコメントアウトすると、すべて正常に動作します。
なぜこれが今起こっているのですか、そしてロギングインターセプターを使用できるようにするための修正がありますか?
ありがとう
nhibernate - Windsor 経由でカスタム NHibernate Interceptor を登録する
簡単な AuditInterceptor: EmptyInterceptor を作成しました。Windsor を使用してこの新しいインターセプターをアプリケーションに登録するにはどうすればよいでしょうか
nhibernate - NHibernate IInterceptor でのオブジェクトの保存
ドメイン モデルで ILoggable オブジェクトの IInterceptor をセットアップしました。OnFlushDirty イベントで、ログ (監査) を保存しようとしています。しかし、これを行っている間、私のコードは無限ループに入ります。
_logrepository.Save(log) は、log が ILoggable オブジェクトでない場合でも OnFlushDirty を呼び出します (エンティティがまだ前のオブジェクトであるためです)。
IInterceptor で (別のセッションを開かずに) .Save を使用する方法はありますか、または IInterceptor でデータベースにログを挿入するにはどうすればよいですか?
c# - Castle Fluent Interface でインターセプターを登録する
インターセプターを介してnhibernate トランザクション処理を実装しようとしていますが、流暢なメカニズムを介してインターフェイスを登録する方法がわかりませんでした。
私は見る
しかし、それを使用する方法がわからない。誰かが私を助けることができますか?この例は少し複雑に見えました。