public static async Task <TResponse> CallAsync <TResponse>(this IRoutingSender sender, object request, CancellationToken cancellationToken = default) { var requestMessage = JsonMessage.Write(request); var responseMessage = await sender.CallAsync(requestMessage, cancellationToken); return(JsonMessage.Read <TResponse>(responseMessage)); }
public void Configure(IApplicationBuilder app, IRoutingSender sender) { app.UseTracing(ServiceName); var router = new RouteBuilder(app); router.MapGet("list", HandleList); router.MapGet("search", HandleSearch); router.MapPost("new", HandleNew); app.UseRouter(router.Build()); }
private static IWebHost StartWebServer(PluginMetadata plugin, IRoutingSender sender) { var port = Interlocked.Increment(ref _port); Console.WriteLine($"Running {plugin.ServiceKey} HTTP server on {port}"); return(new WebHostBuilder() .UseKestrel(k => k.ListenLocalhost(port)) .ConfigureServices(services => services.AddSingleton(sender)) .UseStartup(plugin.Type) .Start()); }
public static LocalModel CreateHandler(IRoutingSender sender) { var plugins = DiscoverPlugins(); var handler = new LocalModel(); foreach (var plugin in plugins.Where(x => x.ServiceType == ServiceType.MessageHandler)) { Bootstrapper.RegisterPluginAsync(sender, handler, plugin).Wait(); } return(handler); }
public static async Task RegisterPluginAsync(IRoutingSender sender, IRoutingRegistration registration, PluginMetadata pluginMetadata) { if (pluginMetadata.ServiceType != ServiceType.MessageHandler) { return; } var plugin = CreatePlugin(pluginMetadata, sender); var routes = RouteDiscoverer.Discover(pluginMetadata); foreach (var route in routes) { await RegisterRouteAsync(registration, plugin, route); } }
private static object CreatePlugin(PluginMetadata metadata, IRoutingSender sender) { var type = metadata.Type; var constructor = type.GetConstructor(new[] { typeof(IRoutingSender) }); if (constructor != null) { return(constructor.Invoke(new object[] { sender })); } constructor = type.GetConstructor(new Type[0]); if (constructor != null) { return(constructor.Invoke(new object[0])); } throw new InvalidOperationException("Cannot activate the plugin, missing compatible constructor"); }
public BusinessLogic(IRoutingSender sender) { _sender = sender; }
public TracedRoutingSender(IRoutingSender sender, string serviceName) { _sender = sender; _serviceName = serviceName; }
public static IRoutingSender ConfigureTracing(this IRoutingSender sender, string serviceName) { return(new TracedRoutingSender(sender, serviceName)); }
public static async Task SendAsync(this IRoutingSender sender, object request, CancellationToken cancellationToken = default) { var message = JsonMessage.Write(request); await sender.SendAsync(message, cancellationToken); }
public static Task <TResponse> CallAsync <TRequest, TResponse>(this IRoutingSender sender, TRequest request, CancellationToken cancellationToken = default) { return(CallAsync <TResponse>(sender, request, cancellationToken)); }
public static Task SendAsync <T>(this IRoutingSender sender, T request, CancellationToken cancellationToken = default) { return(SendAsync(sender, (object)request, cancellationToken)); }
public PollyRoutingSender(IRoutingSender sender, AsyncPolicy policy) { _sender = sender; _policy = policy; }
public TranslationLogic(IRoutingSender sender) { _sender = sender; }
protected abstract LocalModel CreateHandler(IRoutingSender sender);