public void Configure(ISiloBuilder hostBuilder) { hostBuilder .AddIncomingGrainCallFilter(context => { if (string.Equals(context.InterfaceMethod.Name, nameof(IGrainCallFilterTestGrain.GetRequestContext))) { if (RequestContext.Get(GrainCallFilterTestConstants.Key) != null) { throw new InvalidOperationException(); } RequestContext.Set(GrainCallFilterTestConstants.Key, "1"); } return(context.Invoke()); }) .AddIncomingGrainCallFilter <GrainCallFilterWithDependencies>() .AddOutgoingGrainCallFilter(async ctx => { if (ctx.InterfaceMethod?.Name == "Echo") { // Concatenate the input to itself. var orig = (string)ctx.Arguments[0]; ctx.Arguments[0] = orig + orig; } await ctx.Invoke(); }) .AddSimpleMessageStreamProvider("SMSProvider") .AddMemoryGrainStorageAsDefault() .AddMemoryGrainStorage("PubSubStore"); }
/// <summary> /// Adds the Activity Grain incoming filter. /// </summary> /// <param name="builder">The <see cref="ISiloBuilder"/>.</param> /// <returns>The <see cref="ISiloBuilder"/>.</returns> public static ISiloBuilder AddActivityIncomingFilter([NotNull] this ISiloBuilder builder) { if (builder == null) { throw new ArgumentNullException(nameof(builder)); } return(builder.AddIncomingGrainCallFilter <ActivityIncomingGrainCallFilter>()); }
public static void ConfigureForSquidex(this ISiloBuilder builder, IConfiguration config) { builder.ConfigureServices(siloServices => { siloServices.AddSingleton <IMongoClientFactory, DefaultMongoClientFactory>(); siloServices.AddSingleton <IActivationLimiter, ActivationLimiter>(); siloServices.AddScoped <IActivationLimit, ActivationLimit>(); siloServices.AddScoped(typeof(IGrainState <>), typeof(Infrastructure.Orleans.GrainState <>)); }); builder.ConfigureApplicationParts(parts => { parts.AddApplicationPart(SquidexEntities.Assembly); parts.AddApplicationPart(SquidexInfrastructure.Assembly); }); builder.Configure <ClusterOptions>(options => { options.Configure(); }); builder.Configure <ProcessExitHandlingOptions>(options => { options.FastKillOnProcessExit = false; }); builder.Configure <DashboardOptions>(options => { options.HideTrace = true; }); builder.UseDashboard(options => { options.HostSelf = false; }); builder.AddIncomingGrainCallFilter <ActivationLimiterFilter>(); builder.AddIncomingGrainCallFilter <LocalCacheFilter>(); builder.AddIncomingGrainCallFilter <LoggingFilter>(); builder.AddIncomingGrainCallFilter <StateFilter>(); var orleansPortSilo = config.GetOptionalValue("orleans:siloPort", 11111); var orleansPortGateway = config.GetOptionalValue("orleans:gatewayPort", 40000); config.ConfigureByOption("orleans:clustering", new Alternatives { ["MongoDB"] = () => { var address = Helper.ResolveIPAddressAsync(Dns.GetHostName(), AddressFamily.InterNetwork).Result; builder.ConfigureEndpoints( address, orleansPortSilo, orleansPortGateway, true); builder.UseMongoDBClustering(options => { options.Strategy = MongoDBMembershipStrategy.SingleDocument; options.Configure(config); }); }, ["Development"] = () => { builder.UseLocalhostClustering(orleansPortSilo, orleansPortGateway); } }); config.ConfigureByOption("store:type", new Alternatives { ["MongoDB"] = () => { builder.UseMongoDBReminders(options => { options.Configure(config); }); } }); }
public static void ConfigureForSquidex(this ISiloBuilder builder, IConfiguration config) { builder.AddOrleansPubSub(); builder.ConfigureServices(services => { services.AddScoped(typeof(IGrainState <>), typeof(Infrastructure.Orleans.GrainState <>)); services.AddSingletonAs <DefaultMongoClientFactory>() .As <IMongoClientFactory>(); services.AddSingletonAs <ActivationLimiter>() .As <IActivationLimiter>(); services.AddScopedAs <ActivationLimit>() .As <IActivationLimit>(); services.AddInitializer <IJsonSerializer>("Serializer (Orleans)", serializer => { J.DefaultSerializer = serializer; }, -1); }); builder.ConfigureApplicationParts(parts => { parts.AddApplicationPart(SquidexEntities.Assembly); parts.AddApplicationPart(SquidexInfrastructure.Assembly); }); builder.Configure <SchedulingOptions>(options => { options.TurnWarningLengthThreshold = TimeSpan.FromSeconds(5); }); builder.Configure <ClusterOptions>(options => { options.Configure(); }); builder.Configure <DashboardOptions>(options => { options.HideTrace = true; }); builder.UseDashboardEmbeddedFiles(); builder.UseDashboard(options => { options.HostSelf = false; }); builder.AddIncomingGrainCallFilter <LoggingFilter>(); builder.AddIncomingGrainCallFilter <ExceptionWrapperFilter>(); builder.AddIncomingGrainCallFilter <ActivationLimiterFilter>(); builder.AddIncomingGrainCallFilter <LocalCacheFilter>(); builder.AddIncomingGrainCallFilter <StateFilter>(); var(siloPort, gatewayPort) = GetPorts(config); config.ConfigureByOption("orleans:clustering", new Alternatives { ["MongoDB"] = () => { var address = GetIPAddress(config); builder.ConfigureEndpoints( address, siloPort, gatewayPort, true); builder.UseMongoDBClustering(options => { options.Strategy = MongoDBMembershipStrategy.SingleDocument; options.Configure(config); }); if (config.GetValue <bool>("orleans:kubernetes")) { builder.UseKubernetesHosting(); } }, ["Development"] = () => { builder.UseLocalhostClustering(siloPort, gatewayPort); } }); config.ConfigureByOption("store:type", new Alternatives { ["MongoDB"] = () => { builder.UseMongoDBReminders(options => { options.Configure(config); }); } }); }
public void Configure(ISiloBuilder siloBuilder) { siloBuilder.AddIncomingGrainCallFilter <ExceptionWrapperFilter>(); }