Esempio n. 1
0
        /// <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();
 }
Esempio n. 3
0
        /// <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;
        }