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