using System.Collections.Generic;
using Microsoft.Practices.Unity;
using Microsoft.Practices.Unity.InterceptionExtension;
public static void Main()
var container = new UnityContainer()
.AddNewExtension<Interception>()
.RegisterType<IService,Service>(
new Interceptor<InterfaceInterceptor>(),
new InterceptionBehavior<ServiceInterceptor>())
.RegisterType<ITracer, ConsoleTracer>()
.RegisterType<ServiceInterceptor>(
new InjectionConstructor(
new ResolvedParameter<ITracer>(),
var service = container.Resolve<IService>();
public interface IService
public class Service: IService
Console.WriteLine("Hello from Service");
void Trace(string message);
public class ConsoleTracer: ITracer
public void Trace(string message)
Console.WriteLine(message);
public class ServiceInterceptor : IInterceptionBehavior
private readonly string _message;
private readonly ITracer _tracer;
public ServiceInterceptor(ITracer tracer, string message)
public IMethodReturn Invoke(IMethodInvocation input, GetNextInterceptionBehaviorDelegate getNext)
_tracer.Trace(String.Format(
"Invoking method {0} at {1}. {2}",
input.MethodBase, DateTime.Now.ToLongTimeString(), _message));
var result = getNext()(input, getNext);
public IEnumerable<Type> GetRequiredInterfaces()