/// <summary> /// Создает экземпляр прокси. /// </summary> /// <param name="target">Целевой объект</param> /// <param name="targetType">Тип целевого объекта.</param> /// <param name="declaringType">Тип интерфейса, реализуемого целевым классом.</param> /// <param name="invocationWeaveDataProvider">Провайдер данных о вызове.</param> /// <param name="aspectDependencyInjectorHolder">Компонент для внедрения зависимостей в аспекты.</param> /// <param name="aspectFinalizerHolder">Финализатор аспектов.</param> /// <param name="methodInfoCache">Кеш методов.</param> /// <returns>Экземпляр прокси.</returns> internal static object Create( object target, Type targetType, Type declaringType, IInvocationWeaveDataProvider invocationWeaveDataProvider, IComponentHolder <IAspectDependencyInjector> aspectDependencyInjectorHolder, IComponentHolder <IAspectFinalizer> aspectFinalizerHolder, IMethodInfoCache methodInfoCache) { var transparentProxy = ProxyGenerator.Instance.CreateTransparentProxy( typeof(AspectWeaveProxy), declaringType); var weavedProxy = (AspectWeaveProxy)transparentProxy; weavedProxy.Initialize( target, targetType, declaringType, invocationWeaveDataProvider, aspectDependencyInjectorHolder, aspectFinalizerHolder, methodInfoCache); return(transparentProxy); }
public InvocationInterceptor( IInvocationWeaveDataProvider weaveDataProvider, IComponentHolder <IAspectDependencyInjector> dependencyInjectorHolder, IComponentHolder <IAspectFinalizer> aspectFinalizerHolder) { _weaveDataProvider = weaveDataProvider; _dependencyInjector = dependencyInjectorHolder.Get(); _aspectFinalizer = aspectFinalizerHolder.Get(); }
/// <summary> /// Выполняет инициализацию прокси. /// </summary> private void Initialize( object target, Type targetType, Type declaringType, IInvocationWeaveDataProvider invocationWeaveDataProvider, IComponentHolder <IAspectDependencyInjector> aspectDependencyInjectorHolder, IComponentHolder <IAspectFinalizer> aspectFinalizerHolder, IMethodInfoCache methodInfoCache) { Target = target; TargetType = targetType; DeclaringType = declaringType; Interceptor = new InvocationInterceptor( invocationWeaveDataProvider, aspectDependencyInjectorHolder, aspectFinalizerHolder); MethodCache = methodInfoCache; }