根据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 版和 .Net Framework 4.0 版。