Asp.Net
builder.Host.UseServiceProviderFactory(Avalanche.Service.ServiceProviderFactory.Instance) assigns Avalanche.Service as the dependency injection implementation (Avalanche.Service.DependencyInjection.dll).
builder.Host.UseServiceProviderFactory(Avalanche.Service.ServiceProviderFactory.Instance);
builder.Host.ConfigureContainer() allows to assign handlers into IServiceBuilder (see more) and logger decorator example. Handlers can participate in construction of services, decorate, modify, etc them.
builder.Host.ConfigureContainer((HostBuilderContext _, IServiceBuilder sb) =>
{
// Add handlers
sb.AddAction((IQuery q) => System.Console.WriteLine(q.Request));
});
Routing attribute [FromServices] injects services, such as IService.
app.MapGet("/", ([FromServices] Avalanche.Service.IService service) =>
{
// Issue request
Type type = service.GetRequired<TypeRequest, Type>("System.String");
return Results.Ok("Hello world");
});
Full Example
Full example
using System;
using System.Threading.Tasks;
using Avalanche.Service;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Components;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
class di_aspnet
{
public static void Run()
{
{
WebApplicationBuilder builder = WebApplication.CreateBuilder();
// <01>
builder.Host.UseServiceProviderFactory(Avalanche.Service.ServiceProviderFactory.Instance);
// </01>
// <02>
builder.Host.ConfigureContainer((HostBuilderContext _, IServiceBuilder sb) =>
{
// Add handlers
sb.AddAction((IQuery q) => System.Console.WriteLine(q.Request));
});
// </02>
WebApplication app = builder.Build();
// <03>
app.MapGet("/", ([FromServices] Avalanche.Service.IService service) =>
{
// Issue request
Type type = service.GetRequired<TypeRequest, Type>("System.String");
return Results.Ok("Hello world");
});
// </03>
// Shutdown in 5 seconds ...
Task.Run(async () => {
await Task.Delay(5000);
app.Services.GetService<IHostApplicationLifetime>()!.StopApplication();
});
app.Run();
}
}
}