Основываясь на документации для 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()
, а сделал это просто для уверенности.У меня такое чувство, что я здесь упускаю что-то очевидное и фундаментальное, например, есть ли средство, которое необходимо зарегистрировать здесь, чтобы контейнер знал об атрибуте Interceptor?Я не могу найти никаких документов на этот счет.Может кто-нибудь сказать мне, что я делаю неправильно?
Я использую Castle версии 2.5 и 4.0 .Net Framework.