私は、Castle Windsor を使用するプロジェクトに取り組んでおり、ルート実装に機能を追加するためにデコレータと動的インターセプトを組み合わせて使用しています。
たとえば、次のように実装されているように、キャッシュと汎用エラー ログを実行する必要があるデータ アクセス レイヤーの一部に取り組んでいるとします。
interface IRepository
{
/* . . . */
}
// base implementation
class SqlRepository : IRepository
{
/* . . . */
}
// decorator to implement caching
class CachingRepository : IRepository
{
private readonly IRepository _base;
/* . . . */
}
// interceptor to implement generic logging
class LoggingInterceptor : IInterceptor
{
/* . . . */
}
ポイントカットを実装する最善の方法がわからないことを除けば、これまでのところうまくいっています。デコレーターのチェーン内のすべてのオブジェクトにインターセプターが適用されないようにしたいと考えています。代わりに、最も外側のデコレーターにのみ適用する必要があります。この場合、 ではなく に適用する必要がCachingRepository
ありSqlRepository
ます。実際のソリューションには多くのクラスがあるので、インターセプターを手動で適用するための多くの反復コードを避けるために、可能であればインターセプター セレクターを使用してそれを実行したいと考えています。
そして、それが私が立ち往生するところです。IModelInterceptorsSelector
デコレーターの選択やそれらが適用される順序が変わるたびに、インターセプターを提供する必要がある特定のオブジェクトが異なる可能性があるため、明らかにそれを にハードコーディングしたくありません。その時点で、手動登録に固執する方がずっと簡単だと確信しています. そして、私は仕事をするどんな種類の慣習も理解できません.
それで、それはできますか?それとも、自分の運命を受け入れて.Interceptors(InterceptorReference.ForType<. . .
、クリップボードに取り込んで、IWindsorInstaller をいじり始める必要がありますか?