public void Setup() { var winsorContainer = new WindsorContainer(); AspectsConfigurator .UseContainer(new WindsorAspectsContainer(winsorContainer)) .Initialize(); winsorContainer.Register( Component .For <IServiceForBenchmark>() .ImplementedBy <ServiceForBenchmark>()); _windsorService = winsorContainer.Resolve <IServiceForBenchmark>(); _reflectedMethodService = new ServiceForBenchmark(); _reflectedMethod = typeof(IServiceForBenchmark).GetMethod(nameof(IServiceForBenchmark.Identity)); var weaver = AspectWeaverFactory.Create(); _weavedService = (IServiceForBenchmark)weaver.Weave( new ServiceForBenchmark(), typeof(IServiceForBenchmark), typeof(ServiceForBenchmark)); _proxiedService = (IServiceForBenchmark)BypassProxy <IServiceForBenchmark> .Create( new ServiceForBenchmark()); }
/// <inheritdoc /> public override void BindAspects(IComponentsStore settings) { var weaver = AspectWeaverFactory.Create(settings); var predicate = settings.AspectWeavePredicate.Get(); var validDescriptors = _serviceCollection .Select((d, i) => new { Descriptor = d, Index = i }) .Where(o => predicate.IsWeaveable(o.Descriptor.ServiceType, o.Descriptor.ImplementationType)) .ToArray(); foreach (var packed in validDescriptors) { var descriptor = packed.Descriptor; if (descriptor.ServiceType.IsGenericTypeDefinition) { throw new NotSupportedException( $"Регистрация open-generic не поддерживается (serviceType: '{descriptor.ServiceType.Name}')"); } var replace = ServiceDescriptor.Describe( descriptor.ServiceType, provider => weaver.Weave( GetServiceInstance(provider, descriptor), descriptor.ServiceType, descriptor.ImplementationType), descriptor.Lifetime); _serviceCollection.Insert(packed.Index, replace); _serviceCollection.Remove(packed.Descriptor); } }
static void Main(string[] args) { var weaver = AspectWeaverFactory.Create(); var service = weaver.Weave <IDataService, DataService>(new DataService()); service.GenerateData(); }
public Weaved(IComponentsStore components, Container simpleInjectorContainer, WindsorContainer windsorContainer, params DependencyPair[] dependency) { _dependency = dependency ?? Array.Empty <DependencyPair>(); _windsorContainer = windsorContainer; _simpleInjectorContainer = simpleInjectorContainer; _aspectWeaver = AspectWeaverFactory.Create(components); }
public void Setup() { _weaver = AspectWeaverFactory.Create(); _container = new WindsorContainer(); _container.Register( Component.For <IServiceForBenchmark>() .ImplementedBy <ServiceForBenchmark>()); }
/// <inheritdoc /> public override void BindAspects(IComponentsStore components) { var weaver = AspectWeaverFactory.Create(components); object Proxier(object o, Type declaredType, Type targetType) => weaver.Weave(o, declaredType, targetType); _container.ExpressionBuilt += (sender, args) => { var producer = _container.GetRegistration(args.RegisteredServiceType); var implementationType = producer?.Registration.ImplementationType; args.Expression = Expression.Convert( Expression.Invoke( Expression.Constant((Func <object, Type, Type, object>)Proxier), args.Expression, Expression.Constant(args.RegisteredServiceType, typeof(Type)), Expression.Constant(implementationType, typeof(Type)) ), args.RegisteredServiceType ); }; }