سؤال

أنا أستخدم Castle DynamicProxy مع Autofac.لدي كائن قمت بإنشاء وكيل له، ولدي جهازان اعتراضيان يعملان على الوكيل، أحدهما لتسجيل الاستثناء والثاني لتغيير القيمة المرجعة للطريقة.يبدو رمز التسجيل كما يلي:

var builder = new ContainerBuilder();

builder.Register(c => c.Resolve<ProxyGenerator>()
    .CreateClassProxy<Foo>(
        c.Resolve<ResultProcessorInterceptor>(),
        c.Resolve<ExceptionLoggingInterceptor>()))
    .As<Foo>();

ومن خلال توفير الوسيطات بهذا الترتيب، أجد أنني أحصل على النتيجة التي أريدها، أي أنه يتم تسجيل الاستثناء ومعالجة النتيجة.إذا قمت بعكس ترتيب الوسائط، فلن يتم التسجيل.

سؤالي إذن:المسجلة بهذه الطريقة، هل يتم ضمان تنفيذ المعترضات بنفس الترتيب في كل مرة؟أم أن هناك طريقة أفضل للتأكد من أن الطلب سيكون كما أنوي في كل مرة؟

FWIW، نظرت إلى واجهة IInterceptorSelector.ربما أفتقد شيئًا ما - وهو أمر غير مرجح - ولكن يبدو أن ذلك لم يكن ذا صلة في هذه الحالة.ولكن سأكون سعيدًا بالتصحيح إذا كنت مخطئًا.

يمكنني تقديم نموذج تعليمات برمجية أطول إذا لزم الأمر.

musicologyman

هل كانت مفيدة؟

المحلول

نعم، سيتم تنفيذ الاعتراضات بشكل افتراضي بالترتيب المقدم لكل طريقة تم اعتراضها.

كما لاحظت بشكل صحيح، يمكنك تجاوزه على أساس كل طريقة باستخدام IInterceptorSelector إذا لزم الأمر.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top