0
为什么DoIt()方法调用被拦截?我应该使用InterfaceInterceptor以外的其他方法来拦截DoIt()方法吗?你会怎么做?为什么这个方法调用不被拦截?
using System;
using Microsoft.Practices.Unity;
using Microsoft.Practices.Unity.InterceptionExtension;
namespace UnityTest
{
class Program
{
static void Main(string[] args)
{
IUnityContainer container = new UnityContainer();
container.AddNewExtension<Interception>();
container.RegisterType<ILogger, Logger>();
container.Configure<Interception>().SetInterceptorFor<ILogger>(new InterfaceInterceptor());
var logger = container.Resolve<ILogger>();
logger.Write("World.");
Console.ReadKey();
}
}
public interface ILogger
{
void Write(string message);
[Test]
void DoIt(string message);
}
public class Logger : ILogger
{
public void Write(string message)
{
DoIt(message);
}
public void DoIt(string message)
{
Console.Write(message);
}
}
public class TestAttribute : HandlerAttribute
{
public override ICallHandler CreateHandler(IUnityContainer container)
{
return new TestHandler();
}
}
public class TestHandler : ICallHandler
{
public int Order { get; set; }
public IMethodReturn Invoke(IMethodInvocation input, GetNextHandlerDelegate getNext)
{
Console.Write("Hello, ");
return getNext()(input, getNext);
}
}
}
我可以用Instance或Type拦截吗?因为我需要拦截一个被接口本身调用的方法,就像它的例子。 – 2009-11-04 19:32:37
是的,您可能会使Logger.DoIt虚拟并在Logger上创建一个实例inteceptor。我认为Unity可能会遇到类似嵌套代理的问题,但2.0可能已经修复了它... – Lee 2009-11-04 20:19:04