public static TInterface ToProxy <TInterface>(IProxyable proxyable) { var proxy = DispatchProxy.Create <TInterface, DelegatingDispatchProxy>(); ((DelegatingDispatchProxy)(object)proxy).InvokeDelegate = proxyable.Invoke; return(proxy); }
public override object BuildUp(IBuilderContext context, object buildKey, object existing) { object buildObject = base.BuildUp(context, buildKey, existing); IPolicyInjectionPolicy policyInjectionPolicy = context.Policies.Get <IPolicyInjectionPolicy>(buildKey); if (policyInjectionPolicy != null && policyInjectionPolicy.ApplyPolicies) { policyInjectionPolicy.SetPolicyConfigurationSource(GetConfigurationSource(context)); Type typeToBuild; TryGetTypeFromBuildKey(buildKey, out typeToBuild); object newBuildObject = policyInjectionPolicy.ApplyProxy(buildObject, typeToBuild); if (!Object.ReferenceEquals(newBuildObject, buildObject)) { IProxyable proxyable = newBuildObject as IProxyable; if (proxyable != null) { proxyable.Proxy = newBuildObject; } } buildObject = newBuildObject; } return(buildObject); }