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(); });
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); }