コード例 #1
0
        /// <summary>
        /// The create.
        /// </summary>
        /// <param name="instance">
        /// The instance.
        /// </param>
        /// <param name="type">
        /// </param>
        /// <param name="loggerFactory">
        /// The logger.
        /// </param>
        /// <param name="aspectConfigurationProvider">
        /// </param>
        /// <param name="loggingAspectFactoryType">
        /// </param>
        /// <returns>
        /// The <see cref="T"/>.
        /// </returns>
        public static T Create(T instance, Type type, ILoggerFactory loggerFactory, IAspectConfigurationProvider aspectConfigurationProvider, Type loggingAspectFactoryType)
        {
            if (instance == null)
            {
                throw new ArgumentNullException(nameof(instance));
            }
            if (type == null)
            {
                throw new ArgumentNullException(nameof(type));
            }
            if (loggerFactory == null)
            {
                throw new ArgumentNullException(nameof(loggerFactory));
            }
            if (aspectConfigurationProvider == null)
            {
                throw new ArgumentNullException(nameof(aspectConfigurationProvider));
            }
            if (loggingAspectFactoryType == null)
            {
                throw new ArgumentNullException(nameof(loggingAspectFactoryType));
            }

            object proxy = Create <T, LoggingAspect <T> >();

            ((LoggingAspect <T>)proxy).Instance   = instance;
            ((LoggingAspect <T>)proxy).ObjectType = type;
            ((LoggingAspect <T>)proxy).Logger     = loggerFactory.CreateLogger(type.FullName);
            ((LoggingAspect <T>)proxy).AspectConfigurationProvider = aspectConfigurationProvider;
            ((LoggingAspect <T>)proxy).FactoryType = loggingAspectFactoryType;
            return((T)proxy);
        }
        /// <summary>
        ///     The configure aspects.
        /// </summary>
        /// <param name="serviceCollection">
        ///     The service collection.
        /// </param>
        /// <param name="aspectConfigurationProvider">
        ///     The aspect configuration provider.
        /// </param>
        /// <returns>
        ///     The <see cref="IServiceCollection" />.
        /// </returns>
        private static IServiceCollection ConfigureAspects(this IServiceCollection serviceCollection,
                                                           IAspectConfigurationProvider aspectConfigurationProvider)
        {
            for (var index = 0; index < serviceCollection.Count; index++)
            {
                var service = serviceCollection[index];

                if (service.ServiceType.IsInterface && service.ImplementationType != null)
                {
                    var aspectConfiguration =
                        aspectConfigurationProvider.GetTypeAspectConfiguration(service.ServiceType,
                                                                               service.ImplementationType);

                    if (aspectConfiguration == null)
                    {
                        continue;
                    }

                    serviceCollection.TryAdd(ServiceDescriptor.Describe(service.ImplementationType, service.ImplementationType, service.Lifetime));
                    serviceCollection[index] = new ServiceDescriptor(service.ServiceType,
                                                                     serviceProvider => InvokeCreateFactory(serviceProvider, aspectConfiguration), service.Lifetime);
                }
            }

            return(serviceCollection);
        }
コード例 #3
0
        /// <summary>
        ///     Initializes a new instance of the <see cref="AspectRegistrationBuilder" /> class.
        /// </summary>
        /// <param name="services">
        ///     The services.
        /// </param>
        /// <param name="aspectConfigurationProvider">
        ///     The aspect configuration provider.
        /// </param>
        protected AspectRegistrationBuilder(IServiceCollection services,
                                            IAspectConfigurationProvider aspectConfigurationProvider)
        {
            Services = services ?? throw new ArgumentNullException(nameof(services));
            AspectConfigurationProvider = aspectConfigurationProvider ??
                                          throw new ArgumentNullException(nameof(aspectConfigurationProvider));

            aspectConfigurationProvider.ConfigurationEntries.ForEach(RegisterAspectConfiguration);
        }
コード例 #4
0
        /// <summary>
        ///     The create.
        /// </summary>
        /// <param name="instance">
        ///     The instance.
        /// </param>
        /// <param name="type">
        /// </param>
        /// <param name="loggerFactory">
        ///     The logger.
        /// </param>
        /// <param name="inMemoryAspectConfigurationProvider">
        /// </param>
        /// <returns>
        ///     The <see cref="T" />.
        /// </returns>
        public static T Create(T instance, Type type, ILoggerFactory loggerFactory, IAspectConfigurationProvider inMemoryAspectConfigurationProvider)
        {
            object proxy = Create <T, BaseAspectTestClass <T> >();

            ((BaseAspectTestClass <T>)proxy).Instance   = instance;
            ((BaseAspectTestClass <T>)proxy).ObjectType = type;
            ((BaseAspectTestClass <T>)proxy).AspectConfigurationProvider = inMemoryAspectConfigurationProvider;
            ((BaseAspectTestClass <T>)proxy).Logger      = loggerFactory.CreateLogger(type.FullName);
            ((BaseAspectTestClass <T>)proxy).FactoryType = TestAspectFactory.Type;
            return((T)proxy);
        }
 /// <summary>
 ///     The register aspect support.
 /// </summary>
 /// <param name="serviceCollection">
 ///     The service collection.
 /// </param>
 /// <param name="aspectConfigurationProvider">
 ///     The aspect Configuration Provider.
 /// </param>
 /// <returns>
 ///     The <see cref="IServiceCollection" />.
 /// </returns>
 /// <exception cref="ArgumentNullException">
 /// </exception>
 public static IServiceCollection AddAspectSupport(this IServiceCollection serviceCollection,
                                                   IAspectConfigurationProvider aspectConfigurationProvider)
 {
     if (serviceCollection == null)
     {
         throw new ArgumentNullException(nameof(serviceCollection));
     }
     if (aspectConfigurationProvider == null)
     {
         throw new ArgumentNullException(nameof(aspectConfigurationProvider));
     }
     serviceCollection.TryAddSingleton(aspectConfigurationProvider);
     return(serviceCollection.RegisterAspectFactories().ConfigureAspects(aspectConfigurationProvider));
 }
コード例 #6
0
        /// <summary>
        ///     The test initialize.
        /// </summary>
        public LoggingAspectTests()
        {
            loggerFactory = new Mock <ILoggerFactory>();
            logger        = new Mock <ILogger>();
            aspectConfigurationProvider = new InMemoryAspectConfigurationProvider();
            var aspectConfiguration = new AspectConfiguration(new ServiceDescriptor(AspectRegistrationTests.IInterfaceType, AspectRegistrationTests.MyTestInterfaceType, ServiceLifetime.Transient));

            aspectConfiguration.AddEntry(LoggingAspectFactory.LoggingAspectFactoryType, methodsToIntercept: AspectRegistrationTests.IInterfaceType.GetMethods());
            aspectConfiguration.AddEntry(LoggingAspectFactory.LoggingAspectFactoryType, methodsToIntercept: AspectRegistrationTests.IInterfaceType.GetMethods());
            aspectConfigurationProvider.AddEntry(aspectConfiguration);
            loggerFactory.Setup(x => x.CreateLogger(typeof(MyTestInterface).FullName)).Returns(logger.Object);
            instance = LoggingAspect <ITestInterface> .Create(
                new MyTestInterface(),
                typeof(MyTestInterface),
                loggerFactory.Object,
                aspectConfigurationProvider,
                LoggingAspectFactory.LoggingAspectFactoryType);
        }
コード例 #7
0
 /// <summary>
 ///     Initializes a new instance of the <see cref="DispatchProxyAspectRegistrationBuilder" /> class.
 /// </summary>
 /// <param name="services">
 ///     The services.
 /// </param>
 /// <param name="aspectConfigurationProvider">
 ///     The aspect configuration provider.
 /// </param>
 public DispatchProxyAspectRegistrationBuilder(IServiceCollection services,
                                               IAspectConfigurationProvider aspectConfigurationProvider) : base(services, aspectConfigurationProvider)
 {
 }
コード例 #8
0
 /// <inheritdoc />
 public ProfilingAspectFactory(ILoggerFactory loggerFactory, IAspectConfigurationProvider aspectConfigurationProvider) : base(loggerFactory, aspectConfigurationProvider)
 {
 }
コード例 #9
0
 /// <summary>
 ///     Initializes a new instance of the <see cref="BaseAspectFactory" /> class.
 /// </summary>
 /// <param name="loggerFactory">
 ///     The logger factory.
 /// </param>
 /// <param name="aspectConfigurationProvider">
 /// </param>
 protected BaseAspectFactory(ILoggerFactory loggerFactory, IAspectConfigurationProvider aspectConfigurationProvider)
 {
     LoggerFactory = loggerFactory ?? throw new ArgumentNullException(nameof(loggerFactory));
     AspectConfigurationProvider = aspectConfigurationProvider ?? throw new ArgumentNullException(nameof(aspectConfigurationProvider));
 }
 /// <inheritdoc />
 public TestAspectFactory2(ILoggerFactory loggerFactory, IAspectConfigurationProvider aspectConfigurationProvider) : base(loggerFactory, aspectConfigurationProvider)
 {
 }