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 属性を認識させるためにここに登録する必要がある機能はありますか? その趣旨のドキュメントは見つかりません。誰かが私が間違っていることを教えてもらえますか?
Castle バージョン 2.5 と .Net Framework の 4.0 バージョンを使用しています。