Here's a quick proof-of-concept of getting Unity to intercept method calls.
namespace UnityConsole
{
using System;
using System.Collections.Generic;
using Microsoft.Practices.Unity;
using Microsoft.Practices.Unity.InterceptionExtension;
internal class Program
{
private static void Main(string[] args)
{
// Instantiate the Unity Container
IUnityContainer container = new UnityContainer();
// Enable Interception
container.AddNewExtension<Interception>();
// Register the service and the interceptor
container.RegisterType<IService, MyService>(
new Interceptor(new InterfaceInterceptor()), new InterceptionBehavior(typeof(MyBehavior)));
// Get the service from the container
var myService = container.Resolve<IService>();
// Invoke the method
myService.SayHi();
// Prevent screen from closing
Console.ReadLine();
}
}
public class MyBehavior : IInterceptionBehavior
{
public IMethodReturn Invoke(IMethodInvocation input, GetNextInterceptionBehaviorDelegate getNext)
{
// PRE execution logging
System.Diagnostics.Debug.WriteLine("Executing method named: " + input.MethodBase.Name);
// Continue method call
var result = getNext()(input, getNext);
// POST execution logging
System.Diagnostics.Debug.WriteLine("Method execution done - resulted in value: " + result.ReturnValue);
return result;
}
public IEnumerable<Type> GetRequiredInterfaces()
{
// Empty - so no restrictions here
return new Type[] { };
}
public bool WillExecute
{
get
{
return true;
}
}
}
public class MyService : IService
{
public string SayHi()
{
return "Hi there buddy";
}
}
public interface IService
{
string SayHi();
}
}
No comments:
Post a Comment