Пример #1
0
        public static ISiloHostBuilder ConfigurePlatformex(this ISiloHostBuilder builder, Action <PlatformBuilder> configureAction)
        {
            var platform = new Platform();

            var platformBuilder = new PlatformBuilder(platform);

            configureAction(platformBuilder);

            foreach (var asm in platform.Definitions.Assemblies)
            {
                builder.ConfigureApplicationParts(manager =>
                {
                    manager.AddApplicationPart(new AssemblyPart(asm));
                });
            }
            foreach (var data in platform.Definitions.Aggregates.Values)
            {
                var stateImpl      = data.StateType;
                var stateInterface = stateImpl.GetInterfaces()
                                     .FirstOrDefault(i => !i.IsGenericType && i.GetInterfaces()
                                                     .Any(j => j.IsGenericType && j.GetGenericTypeDefinition() == typeof(IAggregateState <>)));
                if (stateInterface != null)
                {
                    builder.ConfigureServices(s => s.AddTransient(stateInterface, stateImpl));
                }
            }

            builder.ConfigureServices(collection =>
            {
                foreach (var action in platformBuilder.ConfigureServicesActions)
                {
                    action(collection);
                }
                collection.AddSingleton <IPlatform>(provider =>
                {
                    platform.SetServiceProvider(provider);
                    return(platform);
                });
            });

            builder
            .AddStartupTask((provider, _) => Initializer.InitAsync(provider))
            .ConfigureApplicationParts(manager =>
                                       manager.AddApplicationPart(typeof(Initializer).Assembly).WithReferences());

            //ѕроверка бизнес-правил на стороне клиента
            builder.AddOutgoingGrainCallFilter(async context =>
            {
                if (context.Arguments is { Length: 1 })
                {
                    var result = RulesHelper.ProcessRules(context.Arguments[0]);
                    if (result != null)
                    {
                        context.Result = new Result(result);
                        return;
                    }
                }

                await context.Invoke();
            });
Пример #2
0
        public void InitialState_TestingValidatedCommand_SuccessResultReplied()
        {
            var aggregateId = TestAggregateId.New;
            var commandId   = SourceId.New;
            var command     = new ValidatedCommand(aggregateId, true).WithSourceId(commandId);

            var result = RulesHelper.ProcessRules(command);

            result.Should().NotBeNull().And.Match <ValidationResult>(r => r.IsValid);
        }