diff --git a/samples/apis/Backet.Api/Backet.Api.csproj b/samples/apis/Backet.Api/Backet.Api.csproj index 211eb50..c1b32ca 100644 --- a/samples/apis/Backet.Api/Backet.Api.csproj +++ b/samples/apis/Backet.Api/Backet.Api.csproj @@ -32,6 +32,7 @@ + diff --git a/samples/apis/Backet.Api/Program.cs b/samples/apis/Backet.Api/Program.cs index 1cccc5b..a3158ca 100644 --- a/samples/apis/Backet.Api/Program.cs +++ b/samples/apis/Backet.Api/Program.cs @@ -25,12 +25,14 @@ namespace Backet.Api Host.CreateDefaultBuilder(args) .UseOrleans(siloBuilder => { + siloBuilder.ConfigureApplicationParts(parts => parts.AddFromApplicationBaseDirectory()); siloBuilder.UseLocalhostClustering(); siloBuilder.AddEfGrainStorage("ef"); siloBuilder.Configure(options => { options.CollectionAge = TimeSpan.FromMinutes(2); }); + siloBuilder.UseDashboard(options => { }); }) .ConfigureWebHostDefaults(webBuilder => { diff --git a/src/Pole.Core/Extensions/PoleServiceCollectionExtensions.cs b/src/Pole.Core/Extensions/PoleServiceCollectionExtensions.cs index 6a538bf..299dfdf 100644 --- a/src/Pole.Core/Extensions/PoleServiceCollectionExtensions.cs +++ b/src/Pole.Core/Extensions/PoleServiceCollectionExtensions.cs @@ -4,6 +4,7 @@ using Pole.Core.Channels; using Pole.Core.EventBus; using Pole.Core.Processor; using Pole.Core.Processor.Server; +using Pole.Core.Query; using Pole.Core.Serialization; using Pole.Core.UnitOfWork; using Pole.Core.Utils; @@ -31,10 +32,14 @@ namespace Microsoft.Extensions.DependencyInjection services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); + services.AddSingleton(); using (var serviceProvider = services.BuildServiceProvider()) { var generatorIdSolver = serviceProvider.GetService(); services.AddSingleton(typeof(ISnowflakeIdGenerator), factory => new SnowflakeIdGenerator(new DateTime(2020, 1, 1), 16, generatorIdSolver.GetGeneratorId())); + + var queryRegister = serviceProvider.GetService(); + queryRegister.Register(services, ServiceLifetime.Scoped); } services.AddSingleton(); diff --git a/src/Pole.Core/Query/IQueries.cs b/src/Pole.Core/Query/IQueries.cs new file mode 100644 index 0000000..daf3fdc --- /dev/null +++ b/src/Pole.Core/Query/IQueries.cs @@ -0,0 +1,11 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Pole.Core.Query +{ + public interface IQueries + { + + } +} diff --git a/src/Pole.Core/Query/IQueryRegister.cs b/src/Pole.Core/Query/IQueryRegister.cs new file mode 100644 index 0000000..3ef176a --- /dev/null +++ b/src/Pole.Core/Query/IQueryRegister.cs @@ -0,0 +1,13 @@ +using Microsoft.Extensions.DependencyInjection; +using System; +using System.Collections.Generic; +using System.Text; +using System.Threading.Tasks; + +namespace Pole.Core.Query +{ + public interface IQueryRegister + { + Task Register(IServiceCollection serviceCollection, ServiceLifetime serviceLifetime); + } +} diff --git a/src/Pole.Core/Query/QueryRegister.cs b/src/Pole.Core/Query/QueryRegister.cs new file mode 100644 index 0000000..b01a329 --- /dev/null +++ b/src/Pole.Core/Query/QueryRegister.cs @@ -0,0 +1,47 @@ +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; +using Pole.Core.Utils; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Pole.Core.Query +{ + class QueryRegister : IQueryRegister + { + private readonly IServiceProvider serviceProvider; + public QueryRegister(IServiceProvider serviceProvider) + { + this.serviceProvider = serviceProvider; + } + public Task Register(IServiceCollection serviceCollection, ServiceLifetime serviceLifetime) + { + foreach (var assembly in AssemblyHelper.GetAssemblies(serviceProvider.GetService>())) + { + var implements = assembly.GetTypes().Where(m => typeof(IQueries).IsAssignableFrom(m) && m.IsClass && !m.IsAbstract); + foreach (var implement in implements) + { + var services = implement.GetInterfaces(); + foreach (var queriesService in services) + { + if (serviceLifetime == ServiceLifetime.Scoped) + { + serviceCollection.AddScoped(queriesService, implement); + } + else if (serviceLifetime == ServiceLifetime.Singleton) + { + serviceCollection.AddSingleton(queriesService, implement); + } + else + { + serviceCollection.AddTransient(queriesService, implement); + } + } + } + } + return Task.CompletedTask; + } + } +}