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;
+ }
+ }
+}