コード例 #1
0
        public override void Run(ServiceProviderContainer container, Assembly[] assemblies, CrudlessOptions options)
        {
            var universalProfiles = assemblies
                                    .SelectMany(x => x.GetExportedTypes())
                                    .Where(x => !x.IsAbstract &&
                                           x.BaseType != null &&
                                           x.BaseType.IsGenericType &&
                                           x.BaseType.GetGenericTypeDefinition() == typeof(UniversalRequestProfile <>))
                                    .ToArray();

            bool ShouldDecorate(DecoratorConditionalContext context)
            {
                var tRequest = context.ServiceType.GetGenericArguments()[0];

                foreach (var type in tRequest.BuildTypeHierarchyUp())
                {
                    if (type.GetInterface(typeof(ICrudlessRequest).Name) != null)
                    {
                        return(false);
                    }

                    if (universalProfiles.Any(x => x.BaseType.GetGenericArguments()[0] == type))
                    {
                        return(true);
                    }
                }

                return(false);
            }

            container.RegisterDecorator(typeof(IRequestHandler <>), typeof(UniversalRequestDecorator <>), ShouldDecorate);
            container.RegisterDecorator(typeof(IRequestHandler <,>), typeof(UniversalRequestDecorator <,>), ShouldDecorate);
        }
コード例 #2
0
        public override void Run(ServiceProviderContainer container, Assembly[] assemblies, CrudlessOptions options)
        {
            var shouldValidate      = ShouldValidate(options.ValidateAllRequests);
            var shouldMaybeValidate = ShouldMaybeValidate(options.ValidateAllRequests);

            container.Register(typeof(IRequestValidator <>), assemblies);

            container.RegisterInstance(new ValidatorFactory(container));

            container.RegisterDecorator(typeof(IRequestHandler <>), ValidatorFactory, shouldValidate);
            container.RegisterDecorator(typeof(IRequestHandler <,>), ValidatorFactory, shouldValidate);

            container.RegisterDecorator(typeof(IRequestHandler <>), typeof(MaybeValidateDecorator <>), shouldMaybeValidate);
            container.RegisterDecorator(typeof(IRequestHandler <,>), typeof(MaybeValidateDecorator <,>), shouldMaybeValidate);
        }
コード例 #3
0
        public override void Run(ServiceProviderContainer container, Assembly[] assemblies, CrudlessOptions options)
        {
            switch (_transactionType)
            {
            default:
            case TransactionType.TransactionScope:
                container.RegisterDecorator(typeof(IRequestHandler <>), typeof(TransactionScopeTransactionDecorator <>), ShouldDecorate());
                container.RegisterDecorator(typeof(IRequestHandler <,>), typeof(TransactionScopeTransactionDecorator <,>), ShouldDecorate());
                break;

            case TransactionType.EntityFramework:
                container.RegisterDecorator(typeof(IRequestHandler <>), typeof(EntityFrameworkTransactionDecorator <>), ShouldDecorate());
                container.RegisterDecorator(typeof(IRequestHandler <,>), typeof(EntityFrameworkTransactionDecorator <,>), ShouldDecorate());
                break;
            }
        }