castle.core.Interceptorattribute عدم حقن التقاطع
-
27-09-2019 - |
سؤال
على أساس توثيق Castle.core.InterceptorAttribute, ، أحاول إجراء هذا الاختبار البسيط ، وليس لدي حظ:
using NUnit.Framework;
using Castle.DynamicProxy;
using Castle.Core;
using Castle.MicroKernel;
using Castle.MicroKernel.Registration;
public interface IIntercepted { string get(); }
[Interceptor(typeof(TestInterceptor))]
public class Intercepted : IIntercepted
{
public virtual string get() { return "From Service"; }
}
public class TestInterceptor : IInterceptor
{
public void Intercept(IInvocation invocation)
{
invocation.Proceed();
invocation.ReturnValue = "From Proxy";
}
}
[TestFixture]
public class TestFixture
{
[Test]
public void Test_interception()
{
var container = new DefaultKernel();
container.Register(
Component.For<TestInterceptor>().LifeStyle.Transient,
Component.For<IIntercepted>().ImplementedBy<Intercepted>());
var instance = container.Resolve<IIntercepted>();
Assert.That(instance.get(), Is.EqualTo("From Proxy"));
}
}
في التجول في الاختبارات ، instance
ليس وكيل و get()
يعود "من الخدمة". يبدو لي أنه في هذه الحالة ، لا أحتاج إلى صنع get()
افتراضي ، لكنه فعل ذلك فقط للتأكد. لدي شعور بأنني أفتقد شيئًا واضحًا وأساسيًا هنا ، مثل هل هناك منشأة يجب تسجيلها هنا لجعل الحاوية على دراية بسمات التقاطع؟ لا يمكنني العثور على أي وثائق بهذا المعنى. هل يمكن لأحد أن يخبرني بما أفعله خطأ؟
أنا أستخدم Castle الإصدار 2.5 وإصدار 4.0 من .NET Framework.
المحلول
إذا كنت ستستخدم DefaultKernel
مباشرة ، يجب عليك إعداد مصنع الوكيل:
var container = new DefaultKernel {ProxyFactory = new DefaultProxyFactory()};
خلاف ذلك ، فقط استخدم WindsorContainer
بدلا من ذلك (الموصى بها).
راجع للشغل: لا تحتاج إلى جعل الطريقة افتراضية في فئة الصقل في هذه الحالة.
لا تنتمي إلى StackOverflow