攔截器可以按固定順序連結
對於這樣的註冊:
var container = new WindsorContainer();
container.Register(
Component.For<FirstInterceptor>(),
Component.For<SecondInterceptor>(),
Component.For<ThirdInterceptor>(),
Component.For<IService>()
.ImplementedBy<Service>()
.Interceptors<FirstInterceptor>()
.Interceptors<SecondInterceptor>()
.Interceptors<ThirdInterceptor>());
var service = container.Resolve<IService>();
service.CreateOrder(new Order());
攔截器具有以下精神:
public class FirstInterceptor : IInterceptor
{
public void Intercept(IInvocation invocation)
{
Console.WriteLine("First!");
invocation.Proceed();
Console.WriteLine("First.");
}
}
並通過以下方式實施服務:
public interface IService
{
void CreateOrder(Order orderToCreate);
}
public class Service : IService
{
public void CreateOrder(Order orderToCreate)
{
Console.WriteLine("Creating order...");
// ...
}
}
我們可以觀察輸出,它會演示以固定順序建立的攔截器將按以下順序執行:
First!
Second!
Third!
Creating order...
Third.
Second.
First.