using System.Runtime.CompilerServices;
using Microsoft.Practices.Unity.InterceptionExtension;
using Microsoft.Practices.EnterpriseLibrary.PolicyInjection.Configuration;
using Microsoft.Practices.EnterpriseLibrary.Common.Configuration;
using Microsoft.Practices.Unity;
using Microsoft.Practices.EnterpriseLibrary.PolicyInjection;
namespace ResolvingWithPolicyInjection
{
public static class UnityContainerExtensionMethods
{
public static T ResolveWithPolicyInjection<T>(this UnityContainer unityContainer)
{
var resolved = unityContainer.Resolve<T>();
return PolicyInjection.Wrap<T>(resolved);
}
public static void RegisterTypeWithPolicyInjection<TFrom, TTo>(this UnityContainer unityContainer) where TTo : TFrom
{
var configSource = ConfigurationSourceFactory.Create();
var policyInjectionSection = configSource.GetSection(PolicyInjectionSettings.SectionName);
var policySettings = (PolicyInjectionSettings)policyInjectionSection;
if ((policySettings != null))
{
policySettings.ConfigureContainer(unityContainer, configSource);
}
unityContainer.Configure<Interception>().SetInterceptorFor<TFrom>(new TransparentProxyInterceptor());
unityContainer.RegisterType<TFrom, TTo>();
}
}
}