using System.Collections.Generic;
using Microsoft.Practices.Unity;
using Microsoft.Practices.Unity.InterceptionExtension;
public static void Main()
var container = new UnityContainer();
container.AddNewExtension<Interception>();
container.RegisterType<IService>("original", new InjectionFactory(c => new Service()));
container.RegisterType<IService>(new InjectionFactory(c => c.Resolve<IService>("original")));
Console.WriteLine("Resolve and call SayHello without interception registered");
var service = container.Resolve<IService>();
container.RegisterType<IService>(
new InjectionFactory(c => c.Resolve<IService>("original")),
new Interceptor<InterfaceInterceptor>(),
new InterceptionBehavior<ServiceInterceptor>());
Console.WriteLine("Resolve and call SayHello after interception registered");
var serviceWithInterceptors = container.Resolve<IService>();
serviceWithInterceptors.SayHello();
Console.WriteLine("Interception isn't applied to previous instance");
public interface IService
public class Service: IService
Console.WriteLine("Hello from Service");
public class ServiceInterceptor : IInterceptionBehavior
public IMethodReturn Invoke(IMethodInvocation input, GetNextInterceptionBehaviorDelegate getNext)
Console.WriteLine(String.Format(
"Invoking method {0} at {1}",
input.MethodBase, DateTime.Now.ToLongTimeString()));
var result = getNext()(input, getNext);
public IEnumerable<Type> GetRequiredInterfaces()