public void PrepareBoundaryAspects_ShouldRemove_DuplicatedAspects()
        {
            // Arrange
            var declarations = new []
            {
                MethodAspectDeclaration <MethodBoundaryAspect> .FromType(new ReturnDefaultValueAspect(BoundaryType.Entry)  { Order = 0 }, null),
                MethodAspectDeclaration <MethodBoundaryAspect> .FromType(new ObservableAspect { Order = 2 }, null),
                MethodAspectDeclaration <MethodBoundaryAspect> .FromMethod(new ObservableAspect { Order = 1 }, null),
            };

            var collector          = CreateAspectCollector(declarations);
            var orderer            = CreateAspectOrderStrategy <MethodBoundaryAspect, int>(a => a.Order);
            var dependencySelector = CreateAspectDependencySelector();
            var finalizer          = CreateAspectFinalizer();

            var factory = new AspectFactory(
                collector.ToInstanceHolder(),
                orderer.ToInstanceHolder(),
                dependencySelector.ToInstanceHolder(),
                finalizer.ToInstanceHolder());


            // Act
            var aspects = factory.CreateBoundaryAspects(signature: null);

            // Assert
            Assert.Equal(2, aspects.Length);
            Assert.Equal(declarations.ElementAt(0).MethodAspect, aspects.ElementAt(0)); // 1й был удален. тк. его приоритет ниже
            Assert.Equal(declarations.ElementAt(2).MethodAspect, aspects.ElementAt(1));
        }
Example #2
0
        public IEnumerable <MethodAspectDeclaration <TAspect> > SelectAspectDeclarations <TAspect>(MethodInfo method)
            where TAspect : MethodAspect
        {
            var aspects = method.GetCustomAttributes <TAspect>(inherit: false)
                          .Where(a => !a.GetType().IsAbstract);

            return(aspects.Select(a => MethodAspectDeclaration <TAspect> .FromMethod(a, method)));
        }