クラス インスタンスに登録されたコンポーネントをインターセプトする際に問題があります。
//this does not get intercepted
container.Register(Component.For<IService>().Instance(instanceService)
.Interceptors<Interceptor>());
クラスインスタンスを使用せずにコンポーネントを登録すると、インターセプターが機能します
//this get intercepted
container.Register(Component.For<IService>().ImplementedBy<SampleService>()
.Interceptors<Interceptor>());
これはバグですか、それとも仕様ですか?
ありがとう
これは単体テスト コードです。
[Test]
public void Test_Windsor_Interceptor_With_Instance_Component_Registration()
{
IService instanceService = new SampleService();
var container = new WindsorContainer();
container.Register(Component.For<Interceptor>());
//this get intercepted
container.Register(Component.For<IService>().ImplementedBy<SampleService>()
.Interceptors<Interceptor>());
////this does not get intercepted
//container.Register(Component.For<IService>().Instance(instanceService)
// .Interceptors<Interceptor>());
var proxiedService = container.Resolve<IService>();
proxiedService.DoSomething();
}
public class Interceptor : Castle.DynamicProxy.IInterceptor
{
public void Intercept(Castle.DynamicProxy.IInvocation invocation)
{
throw new System.NotImplementedException("Interceptor succesfully called but not implemented");
}
}
public interface IService
{
void DoSomething();
}
public class SampleService : IService
{
public void DoSomething()
{
string dummy = string.Empty;
}
}