/// <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); }
/// <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); }
/// <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)); }
/// <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); }
/// <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) { }
/// <inheritdoc /> public ProfilingAspectFactory(ILoggerFactory loggerFactory, IAspectConfigurationProvider aspectConfigurationProvider) : base(loggerFactory, aspectConfigurationProvider) { }
/// <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) { }