fix: files in their projects
This commit is contained in:
@@ -7,57 +7,8 @@ using Microsoft.Extensions.DependencyInjection.Extensions;
|
||||
|
||||
namespace InServiceQue.Sample;
|
||||
|
||||
public class InServiceQueBuilder
|
||||
{
|
||||
private IServiceCollection _services;
|
||||
private ITypeRegistry _typeRegistry;
|
||||
private HostedServiceRegistrator _hostedServiceRegistrator;
|
||||
public InServiceQueBuilder(IServiceCollection services)
|
||||
{
|
||||
_services = services;
|
||||
StartBuilding();
|
||||
}
|
||||
|
||||
private void StartBuilding()
|
||||
{
|
||||
_typeRegistry = new QueueTypeRegistry();
|
||||
_services.AddSingleton<ITypeRegistry>(_typeRegistry);
|
||||
_hostedServiceRegistrator = new HostedServiceRegistrator();
|
||||
}
|
||||
|
||||
public void AddQueue<T, THandler>()
|
||||
where T : IQueueTask
|
||||
where THandler : IQueueHandler<T>
|
||||
{
|
||||
_typeRegistry.RegisterTaskType(typeof(T).Name, typeof(THandler).GetInterfaces()
|
||||
.First(x => x.IsGenericType
|
||||
&& x.GetGenericTypeDefinition() == typeof(IQueueHandler<>)));
|
||||
|
||||
var taskType = typeof(T);
|
||||
var queueHandlerType = typeof(THandler);
|
||||
//can't resolve then
|
||||
_services.AddScoped(typeof(IQueueHandler<>).MakeGenericType(taskType), queueHandlerType);
|
||||
|
||||
var hostedServiceType = typeof(QueueService<>).MakeGenericType(taskType);
|
||||
_hostedServiceRegistrator.RegisterHostedService(_services, hostedServiceType);
|
||||
}
|
||||
}
|
||||
|
||||
public static class DIExtensions
|
||||
{
|
||||
public static void AddInServiceQue(this IServiceCollection services, Action<InServiceQueBuilder> buildAction)
|
||||
|
||||
{
|
||||
var builder = new InServiceQueBuilder(services);
|
||||
buildAction(builder);
|
||||
}
|
||||
|
||||
public static IServiceCollection RegisterInternals(this IServiceCollection services)
|
||||
{
|
||||
services.AddTransient<ITaskRepository, TaskRepositoryInMemory>();
|
||||
return services;
|
||||
}
|
||||
|
||||
public static IServiceCollection RegisterQueues(this IServiceCollection services)
|
||||
{
|
||||
using var sp = services.BuildServiceProvider();
|
||||
|
||||
@@ -1,19 +0,0 @@
|
||||
using System.Reflection;
|
||||
|
||||
namespace InServiceQue.Sample;
|
||||
|
||||
public class HostedServiceRegistrator
|
||||
{
|
||||
public void RegisterHostedService(IServiceCollection services, Type hostedServiceType)
|
||||
{
|
||||
var servicesType = typeof(HostedServiceRegistrator);
|
||||
var methodInfo = servicesType.GetMethod(nameof(AddHostedService));
|
||||
var genericMethod = methodInfo.MakeGenericMethod(hostedServiceType);
|
||||
|
||||
genericMethod.Invoke(this, new object[] { services });
|
||||
}
|
||||
|
||||
public IServiceCollection AddHostedService<THostedService>(IServiceCollection services)
|
||||
where THostedService : class, IHostedService =>
|
||||
services.AddHostedService<THostedService>();
|
||||
}
|
||||
17
InServiceQue.Sample/OtherMessageHandler.cs
Normal file
17
InServiceQue.Sample/OtherMessageHandler.cs
Normal file
@@ -0,0 +1,17 @@
|
||||
using InServiceQue.Services;
|
||||
|
||||
namespace InServiceQue.Sample;
|
||||
|
||||
public class OtherMessageHandler: IQueueHandler<OtherMessageTask>
|
||||
{
|
||||
public bool Handle(string payload)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public async Task<bool> HandleAsync(string payload)
|
||||
{
|
||||
Console.WriteLine($"Pizda {payload}");
|
||||
return await Task.FromResult<bool>(true);
|
||||
}
|
||||
}
|
||||
22
InServiceQue.Sample/OtherMessageTask.cs
Normal file
22
InServiceQue.Sample/OtherMessageTask.cs
Normal file
@@ -0,0 +1,22 @@
|
||||
using InServiceQue.Core.Models;
|
||||
|
||||
namespace InServiceQue.Sample;
|
||||
|
||||
public class OtherMessageTask: IQueueTask
|
||||
{
|
||||
private string _payload;
|
||||
|
||||
public OtherMessageTask(string payload)
|
||||
{
|
||||
_payload = payload;
|
||||
}
|
||||
public string GetTypeString()
|
||||
{
|
||||
return nameof(OtherMessageTask);
|
||||
}
|
||||
|
||||
public string GetPayloadString()
|
||||
{
|
||||
return _payload;
|
||||
}
|
||||
}
|
||||
@@ -1,15 +1,27 @@
|
||||
using InServiceQue;
|
||||
using InServiceQue.Core.Models;
|
||||
using InServiceQue.Core.Repositories;
|
||||
using InServiceQue.InMemory;
|
||||
using InServiceQue.Sample;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
|
||||
var builder = WebApplication.CreateBuilder(args);
|
||||
builder.Services.RegisterInternals();
|
||||
builder.Services.AddInServiceQue(builder =>
|
||||
{
|
||||
builder.AddQueue<SendMessageTask, SendMessageHandler>();
|
||||
});
|
||||
builder.AddQueue<OtherMessageTask, OtherMessageHandler>();
|
||||
}).UseInMemory();
|
||||
var app = builder.Build();
|
||||
|
||||
app.MapGet("/", (string msg) => app.Services.GetService<ITaskRepository>().Insert(new QueueTask(new SendMessageTask(new SendMessagePayload(){To = "John", From = "Garry", Message = msg}))));
|
||||
app.MapGet("/", async (string msg) =>
|
||||
{
|
||||
var taskRepository = app.Services.GetService<ITaskRepository>();
|
||||
await taskRepository.InsertAsync(new QueueTask(new SendMessageTask(new SendMessagePayload()
|
||||
{
|
||||
From = "John", To = "Esther", Message = msg
|
||||
})));
|
||||
await taskRepository.InsertAsync(new QueueTask(new OtherMessageTask(msg)));
|
||||
return new OkResult();
|
||||
});
|
||||
|
||||
app.Run();
|
||||
Reference in New Issue
Block a user