Beispiel #1
0
        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);
            }
        }
Beispiel #3
0
        static void Main(string[] args)
        {
            var weaver  = AspectWeaverFactory.Create();
            var service = weaver.Weave <IDataService, DataService>(new DataService());

            service.GenerateData();
        }
Beispiel #4
0
 public Weaved(IComponentsStore components, Container simpleInjectorContainer,
               WindsorContainer windsorContainer, params DependencyPair[] dependency)
 {
     _dependency              = dependency ?? Array.Empty <DependencyPair>();
     _windsorContainer        = windsorContainer;
     _simpleInjectorContainer = simpleInjectorContainer;
     _aspectWeaver            = AspectWeaverFactory.Create(components);
 }
Beispiel #5
0
        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
                    );
            };
        }