Unity에서 호출 핸들러를 사용하는 방법을 이해하려고합니다.왜 사용자 정의 호출 핸들러가 호출되지 않습니까?
void Main()
{
var container = new UnityContainer();
container.AddNewExtension<Interception>()
.Configure<Interception>()
.AddPolicy("TestPolicy")
.AddCallHandler(new TestCallHandler());
container.RegisterType<IFoo, Foo>();
var foo = container.Resolve<IFoo>();
foo.Test();
}
interface IFoo
{
void Test();
}
class Foo : IFoo
{
public void Test()
{
"Foo.Test()".Dump();
}
}
class TestCallHandler : ICallHandler
{
public IMethodReturn Invoke(IMethodInvocation input, GetNextHandlerDelegate getNext)
{
Console.WriteLine("[Interceptor] Calling {0}.{1}", input.MethodBase.DeclaringType.FullName, input.MethodBase.Name);
return getNext()(input, getNext);
}
public int Order { get; set; }
}
그러나 TestCallHandler.Invoke
가 호출되지 않습니다 그냥 직접 Foo.Test
를 호출 : 여기에 지금까지 가지고있는 코드입니다. 내가 뭘 놓치고 있니?
감사! 실제로 문제를 해결합니다. 모든 유형에 대해 전 세계적으로 그렇게 할 수 있다고 생각했습니다. –
MSDN 문서에서 TransparentProxyInterceptor가 매우 느리게 작동한다고 경고합니다. InterfaceInterceptor가 권장됩니다. https://msdn.microsoft.com/en-us/library/dn178466(v=pandp.30).aspx#sec9 – Calvin