diff --git a/DI/XDIHelperExtension.cs b/DI/XDIHelperExtension.cs
index a4c2439..528d43f 100644
--- a/DI/XDIHelperExtension.cs
+++ b/DI/XDIHelperExtension.cs
@@ -135,7 +135,7 @@ namespace xDataService.DI
if (!isValid)
{
//
- Log("DataService Configuration notProvided ...");
+ Log("DataService Configuration not provided ...");
return;
}
@@ -176,10 +176,8 @@ namespace xDataService.DI
runtimeType: descriptor.Context,
args: [
source,
- descriptor.Provider,
- descriptor.ConnectionString,
- lifetime,
- descriptor.OptionsBuilder
+ descriptor,
+ lifetime
]
);
@@ -213,8 +211,8 @@ namespace xDataService.DI
runtimeTypes: runtimeTypes,
args: [
source,
- r,
- lifetime
+ r,
+ lifetime
]
);
diff --git a/Extensions/XDatabaseDescriptorExtensions.cs b/Extensions/XDatabaseDescriptorExtensions.cs
index 779c027..f34bab0 100644
--- a/Extensions/XDatabaseDescriptorExtensions.cs
+++ b/Extensions/XDatabaseDescriptorExtensions.cs
@@ -1,4 +1,5 @@
using xCommons.Extensions;
+using xDataService.Constants;
using xDataService.Models;
namespace xDataService.Extensions
@@ -21,6 +22,22 @@ namespace xDataService.Extensions
return result;
}
+ ///
+ /// Chack a Descriptor Has Provider or not ...
+ ///
+ ///
+ ///
+ public static bool HasProvider(this XDatabaseDescriptor source)
+ {
+ //
+ var result =
+ source.IsValid() &&
+ source.Provider != XDbProviders.None;
+
+ //
+ return result;
+ }
+
///
/// Check a Descriptor Has EF Core Context or not ...
///
@@ -31,6 +48,8 @@ namespace xDataService.Extensions
//
var result =
source.IsValid() &&
+ source.HasProvider() &&
+ source.Provider != XDbProviders.MongoDB &&
!source.Context.IsNull();
//
@@ -47,11 +66,30 @@ namespace xDataService.Extensions
//
var result =
source.IsValid() &&
+ source.HasProvider() &&
!source.Repositories.IsNull() &&
source.Repositories.HasChild();
//
return result;
}
+
+ ///
+ /// Check a Descriptor Has MongoDB Convention Packs ...
+ ///
+ ///
+ ///
+ public static bool HasConventionPacks(this XDatabaseDescriptor source)
+ {
+ //
+ var result =
+ source.IsValid() &&
+ source.HasProvider() &&
+ source.Provider == XDbProviders.MongoDB &&
+ !source.ConventionPacks.IsNull();
+
+ //
+ return result;
+ }
}
}
\ No newline at end of file
diff --git a/Extensions/XRepositoryDescriptorExtensions.cs b/Extensions/XRepositoryDescriptorExtensions.cs
index aea5029..58eaf16 100644
--- a/Extensions/XRepositoryDescriptorExtensions.cs
+++ b/Extensions/XRepositoryDescriptorExtensions.cs
@@ -65,11 +65,10 @@ namespace xDataService.Extensions
var result =
source.IsValid() &&
!source.GraphType.IsNull() &&
+ !source.GraphQuery.IsNull() &&
!source.GraphSchema.IsNull() &&
!source.GraphTypeKey.IsNull() &&
- !source.GraphQueryService.IsNull() &&
!source.GraphTypeHelperService.IsNull() &&
- !source.GraphQueryImplementation.IsNull() &&
!source.GraphTypeHelperImplementation.IsNull();
//
diff --git a/Helpers/XDataServiceHelper.cs b/Helpers/XDataServiceHelper.cs
index f7338c2..1667f5c 100644
--- a/Helpers/XDataServiceHelper.cs
+++ b/Helpers/XDataServiceHelper.cs
@@ -4,6 +4,8 @@ using GraphQL.Types;
using Microsoft.AspNetCore.Builder;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
+using MongoDB.Bson.Serialization;
+using MongoDB.Bson.Serialization.Conventions;
using MySql.EntityFrameworkCore.Extensions;
using xCommons.Extensions;
using xDataService.Constants;
@@ -28,30 +30,27 @@ namespace xDataService.Helpers
/// Register DbContext ...
///
///
- ///
- ///
+ ///
///
- ///
///
public static void AddXDbContext(
IServiceCollection source,
- XDbProviders provider,
- string connectionString,
- ServiceLifetime lifetime = ServiceLifetime.Scoped,
- Action optionsBuilder = null
+ XDatabaseDescriptor databaseDescriptor,
+ ServiceLifetime lifetime = ServiceLifetime.Scoped
)
where TContext : XDbContext
{
//
- if (provider == XDbProviders.None)
+ var isValid =
+ databaseDescriptor.IsValid() &&
+ databaseDescriptor.HasProvider();
+ if (!isValid)
{
- //
- // Log("Invalid Db Provider ...");
- XException.InvalidArgs.Throw();
+ XException.InvalidConfiguration.Throw();
}
//
- switch (provider)
+ switch (databaseDescriptor.Provider)
{
//
// MySQL ...
@@ -60,7 +59,11 @@ namespace xDataService.Helpers
source.AddEntityFrameworkMySQL();
source.AddDbContext(cfg =>
{
- cfg.UseMySQL(connectionString, optionsBuilder);
+ //
+ cfg.UseMySQL(
+ databaseDescriptor.ConnectionString,
+ databaseDescriptor.OptionsBuilder
+ );
}, lifetime);
break;
@@ -71,7 +74,11 @@ namespace xDataService.Helpers
source.AddEntityFrameworkSqlite();
source.AddDbContext(cfg =>
{
- cfg.UseSqlite(connectionString, optionsBuilder);
+ //
+ cfg.UseSqlite(
+ databaseDescriptor.ConnectionString,
+ databaseDescriptor.OptionsBuilder
+ );
}, lifetime);
break;
@@ -82,21 +89,70 @@ namespace xDataService.Helpers
source.AddEntityFrameworkSqlServer();
source.AddDbContext(cfg =>
{
- cfg.UseSqlServer(connectionString, optionsBuilder);
+ //
+ cfg.UseSqlServer(
+ databaseDescriptor.ConnectionString,
+ databaseDescriptor.OptionsBuilder
+ );
}, lifetime);
break;
//
+ // Mongo DB ...
case XDbProviders.MongoDB:
- // There is notRequired to Register DBConext forMongo DB ...
+ //
+ #region XBaseEntity Mappers ...
+ //
+ // Map ID as BsonId here ...
+ BsonClassMap.RegisterClassMap>(cm =>
+ {
+ //
+ cm.AutoMap();
+ cm.MapIdMember(c => c.Id);
+ });
+ BsonClassMap.RegisterClassMap>(cm =>
+ {
+ //
+ cm.AutoMap();
+ cm.MapIdMember(c => c.Id);
+ });
+ BsonClassMap.RegisterClassMap>(cm =>
+ {
+ //
+ cm.AutoMap();
+ cm.MapIdMember(c => c.Id);
+ });
+ BsonClassMap.RegisterClassMap>(cm =>
+ {
+ //
+ cm.AutoMap();
+ cm.MapIdMember(c => c.Id);
+ });
+ #endregion
+
+ //
+ // Check Has Convention Packs ...
+ isValid = databaseDescriptor.HasConventionPacks();
+ if (isValid)
+ {
+ //
+ ConventionRegistry.Register(
+ nameof(
+ databaseDescriptor.ConventionPacks
+ ),
+ databaseDescriptor.ConventionPacks,
+ type => !type.FullName
+ .IsNullOrEmpty()
+ );
+ }
break;
}
//
- var isValid =
- provider == XDbProviders.MySQL ||
- provider == XDbProviders.SQLite ||
- provider == XDbProviders.SQLServer;
+ isValid =
+ databaseDescriptor.Provider == XDbProviders.MySQL ||
+ databaseDescriptor.Provider == XDbProviders.SQLite ||
+ databaseDescriptor.Provider == XDbProviders.SQLServer;
if (isValid)
{
//
@@ -144,7 +200,12 @@ namespace xDataService.Helpers
///
///
///
- public static void AddXRepository(
+ public static void AddXRepository<
+ TEntity,
+ TKey,
+ TKeyGeneratorService,
+ TKeyGeneratorImplementation
+ >(
IServiceCollection source,
XRepositoryDescriptor repositoryDescriptor,
ServiceLifetime lifetime = ServiceLifetime.Scoped
@@ -187,7 +248,14 @@ namespace xDataService.Helpers
///
///
///
- public static void AddXRepository(
+ public static void AddXRepository<
+ TEntity,
+ TKey,
+ TKeyGeneratorService,
+ TKeyGeneratorImplementation,
+ TEventsService,
+ TEventsImplementation
+ >(
IServiceCollection source,
XRepositoryDescriptor repositoryDescriptor,
ServiceLifetime lifetime = ServiceLifetime.Scoped
@@ -246,15 +314,27 @@ namespace xDataService.Helpers
///
///
///
- ///
- ///
+ ///
///
///
///
///
- public static void AddXRepository(
+ public static void AddXRepository<
+ TEntity,
+ TKey,
+ TKeyGeneratorService,
+ TKeyGeneratorImplementation,
+ TEventsService,
+ TEventsImplementation,
+ TGraph,
+ TGraphKey,
+ TGraphQuery,
+ TGraphTypeHelperService,
+ TGraphTypeHelperImplementation,
+ TGraphSchema
+ >(
IServiceCollection source,
- XRepositoryDescriptor repositoryDescriptor,
+ XRepositoryDescriptor repositoryDescriptor,
ServiceLifetime lifetime = ServiceLifetime.Scoped
)
where TGraphSchema : Schema
@@ -266,9 +346,8 @@ namespace xDataService.Helpers
where TEventsImplementation : XBaseRepositoryEvents
where TKeyGeneratorImplementation : XKeyGenerator
where TGraphTypeHelperService : IXBaseGraphQLTypeHelper
+ where TGraphQuery : XBaseGraphQLQuery
where TGraphTypeHelperImplementation : XBaseGraphQLTypeHelper
- where TGraphQueryService : IXBaseGraphQLQuery
- where TGraphQueryImplementation : XBaseGraphQLQuery
{
//
var isValid = repositoryDescriptor.IsValid();
@@ -309,7 +388,7 @@ namespace xDataService.Helpers
if (isValid)
{
//
- AddXGraphQL(
+ AddXGraphQL(
source,
repositoryDescriptor,
lifetime
@@ -331,17 +410,31 @@ namespace xDataService.Helpers
///
///
///
- ///
- ///
+ ///
///
///
///
///
///
///
- public static void AddXRepository(
+ public static void AddXRepository<
+ TEntity,
+ TKey,
+ TKeyGeneratorService,
+ TKeyGeneratorImplementation,
+ TEventsService,
+ TEventsImplementation,
+ TGraph,
+ TGraphKey,
+ TGraphQuery,
+ TGraphTypeHelperService,
+ TGraphTypeHelperImplementation,
+ TGraphSchema,
+ TRepositoryService,
+ TRepositoryImplementation
+ >(
IServiceCollection source,
- XInMemoryRepositoryDescriptor repositoryDescriptor,
+ XInMemoryRepositoryDescriptor repositoryDescriptor,
ServiceLifetime lifetime = ServiceLifetime.Scoped
)
where TGraphSchema : Schema
@@ -354,10 +447,9 @@ namespace xDataService.Helpers
where TEventsImplementation : XBaseRepositoryEvents
where TKeyGeneratorImplementation : XKeyGenerator
where TGraphTypeHelperService : IXBaseGraphQLTypeHelper
+ where TGraphQuery : XBaseGraphQLQuery
where TRepositoryImplementation : XBaseInMemoryRepositoy
where TGraphTypeHelperImplementation : XBaseGraphQLTypeHelper
- where TGraphQueryService : IXBaseGraphQLQuery
- where TGraphQueryImplementation : XBaseGraphQLQuery
{
//
var isValid = repositoryDescriptor.IsValid();
@@ -398,7 +490,7 @@ namespace xDataService.Helpers
if (isValid)
{
//
- AddXGraphQL(
+ AddXGraphQL(
source,
repositoryDescriptor,
lifetime
@@ -435,17 +527,31 @@ namespace xDataService.Helpers
///
///
///
- ///
- ///
+ ///
///
///
///
///
///
///
- public static void AddXRepository(
+ public static void AddXRepository<
+ TEntity,
+ TKey,
+ TKeyGeneratorService,
+ TKeyGeneratorImplementation,
+ TEventsService,
+ TEventsImplementation,
+ TGraph,
+ TGraphKey,
+ TGraphQuery,
+ TGraphTypeHelperService,
+ TGraphTypeHelperImplementation,
+ TGraphSchema,
+ TRepositoryService,
+ TRepositoryImplementation
+ >(
IServiceCollection source,
- XMongoRepositoryDescriptor repositoryDescriptor,
+ XMongoRepositoryDescriptor repositoryDescriptor,
ServiceLifetime lifetime = ServiceLifetime.Scoped
)
where TGraphSchema : Schema
@@ -457,11 +563,10 @@ namespace xDataService.Helpers
where TRepositoryService : IXBaseRepository
where TEventsImplementation : XBaseRepositoryEvents
where TKeyGeneratorImplementation : XKeyGenerator
- where TGraphTypeHelperService : IXBaseGraphQLTypeHelper
where TRepositoryImplementation : XBaseMongoRepository
+ where TGraphTypeHelperService : IXBaseGraphQLTypeHelper
+ where TGraphQuery : XBaseGraphQLQuery
where TGraphTypeHelperImplementation : XBaseGraphQLTypeHelper
- where TGraphQueryService : IXBaseGraphQLQuery
- where TGraphQueryImplementation : XBaseGraphQLQuery
{
//
var isValid = repositoryDescriptor.IsValid();
@@ -502,7 +607,7 @@ namespace xDataService.Helpers
if (isValid)
{
//
- AddXGraphQL(
+ AddXGraphQL(
source,
repositoryDescriptor,
lifetime
@@ -539,8 +644,7 @@ namespace xDataService.Helpers
///
///
///
- ///
- ///
+ ///
///
///
///
@@ -548,9 +652,25 @@ namespace xDataService.Helpers
///
///
///
- public static void AddXRepository(
+ public static void AddXRepository<
+ TEntity,
+ TKey,
+ TKeyGeneratorService,
+ TKeyGeneratorImplementation,
+ TEventsService,
+ TEventsImplementation,
+ TGraph,
+ TGraphKey,
+ TGraphQuery,
+ TGraphTypeHelperService,
+ TGraphTypeHelperImplementation,
+ TGraphSchema,
+ TRepositoryService,
+ TRepositoryImplementation,
+ TContext
+ >(
IServiceCollection source,
- XEFRepositoryDescriptor repositoryDescriptor,
+ XEFRepositoryDescriptor repositoryDescriptor,
ServiceLifetime lifetime = ServiceLifetime.Scoped
)
where TGraphSchema : Schema
@@ -564,10 +684,9 @@ namespace xDataService.Helpers
where TEventsImplementation : XBaseRepositoryEvents
where TKeyGeneratorImplementation : XKeyGenerator
where TGraphTypeHelperService : IXBaseGraphQLTypeHelper
+ where TGraphQuery : XBaseGraphQLQuery
where TRepositoryImplementation : XBaseEFRepository
where TGraphTypeHelperImplementation : XBaseGraphQLTypeHelper
- where TGraphQueryService : IXBaseGraphQLQuery
- where TGraphQueryImplementation : XBaseGraphQLQuery
{
//
var isValid = repositoryDescriptor.IsValid();
@@ -608,7 +727,7 @@ namespace xDataService.Helpers
if (isValid)
{
//
- AddXGraphQL(
+ AddXGraphQL(
source,
repositoryDescriptor,
lifetime
@@ -645,17 +764,31 @@ namespace xDataService.Helpers
///
///
///
- ///
- ///
+ ///
///
///
///
///
///
///
- public static void UseXRepository(
+ public static void UseXRepository<
+ TEntity,
+ TKey,
+ TKeyGeneratorService,
+ TKeyGeneratorImplementation,
+ TEventsService,
+ TEventsImplementation,
+ TGraph,
+ TGraphKey,
+ TGraphQuery,
+ TGraphTypeHelperService,
+ TGraphTypeHelperImplementation,
+ TGraphSchema,
+ TRepositoryService,
+ TRepositoryImplementation
+ >(
IApplicationBuilder source,
- XInMemoryRepositoryDescriptor repositoryDescriptor
+ XInMemoryRepositoryDescriptor repositoryDescriptor
)
where TGraphSchema : Schema
where TGraphKey : IGraphType
@@ -668,9 +801,8 @@ namespace xDataService.Helpers
where TKeyGeneratorImplementation : XKeyGenerator
where TGraphTypeHelperService : IXBaseGraphQLTypeHelper
where TRepositoryImplementation : XBaseInMemoryRepositoy
+ where TGraphQuery : XBaseGraphQLQuery
where TGraphTypeHelperImplementation : XBaseGraphQLTypeHelper
- where TGraphQueryService : IXBaseGraphQLQuery
- where TGraphQueryImplementation : XBaseGraphQLQuery
{
//
var isValid = repositoryDescriptor.IsValid();
@@ -685,7 +817,7 @@ namespace xDataService.Helpers
if (isValid)
{
//
- UseXGraphQL(
+ UseXGraphQL(
source,
repositoryDescriptor
);
@@ -706,17 +838,31 @@ namespace xDataService.Helpers
///
///
///
- ///
- ///
+ ///
///
///
///
///
///
///
- public static void UseXRepository(
+ public static void UseXRepository<
+ TEntity,
+ TKey,
+ TKeyGeneratorService,
+ TKeyGeneratorImplementation,
+ TEventsService,
+ TEventsImplementation,
+ TGraph,
+ TGraphKey,
+ TGraphQuery,
+ TGraphTypeHelperService,
+ TGraphTypeHelperImplementation,
+ TGraphSchema,
+ TRepositoryService,
+ TRepositoryImplementation
+ >(
IApplicationBuilder source,
- XMongoRepositoryDescriptor repositoryDescriptor
+ XMongoRepositoryDescriptor repositoryDescriptor
)
where TGraphSchema : Schema
where TGraphKey : IGraphType
@@ -727,11 +873,10 @@ namespace xDataService.Helpers
where TRepositoryService : IXBaseRepository
where TEventsImplementation : XBaseRepositoryEvents
where TKeyGeneratorImplementation : XKeyGenerator
- where TGraphTypeHelperService : IXBaseGraphQLTypeHelper
where TRepositoryImplementation : XBaseMongoRepository
+ where TGraphTypeHelperService : IXBaseGraphQLTypeHelper
+ where TGraphQuery : XBaseGraphQLQuery
where TGraphTypeHelperImplementation : XBaseGraphQLTypeHelper
- where TGraphQueryService : IXBaseGraphQLQuery
- where TGraphQueryImplementation : XBaseGraphQLQuery
{
//
var isValid = repositoryDescriptor.IsValid();
@@ -746,7 +891,7 @@ namespace xDataService.Helpers
if (isValid)
{
//
- UseXGraphQL(
+ UseXGraphQL(
source,
repositoryDescriptor
);
@@ -766,8 +911,7 @@ namespace xDataService.Helpers
///
///
///
- ///
- ///
+ ///
///
///
///
@@ -775,9 +919,25 @@ namespace xDataService.Helpers
///
///
///
- public static void UseXRepository(
+ public static void UseXRepository<
+ TEntity,
+ TKey,
+ TKeyGeneratorService,
+ TKeyGeneratorImplementation,
+ TEventsService,
+ TEventsImplementation,
+ TGraph,
+ TGraphKey,
+ TGraphQuery,
+ TGraphTypeHelperService,
+ TGraphTypeHelperImplementation,
+ TGraphSchema,
+ TRepositoryService,
+ TRepositoryImplementation,
+ TContext
+ >(
IApplicationBuilder source,
- XEFRepositoryDescriptor repositoryDescriptor
+ XEFRepositoryDescriptor repositoryDescriptor
)
where TGraphSchema : Schema
where TContext : XDbContext
@@ -790,10 +950,9 @@ namespace xDataService.Helpers
where TEventsImplementation : XBaseRepositoryEvents
where TKeyGeneratorImplementation : XKeyGenerator
where TGraphTypeHelperService : IXBaseGraphQLTypeHelper
+ where TGraphQuery : XBaseGraphQLQuery
where TRepositoryImplementation : XBaseEFRepository
where TGraphTypeHelperImplementation : XBaseGraphQLTypeHelper
- where TGraphQueryService : IXBaseGraphQLQuery
- where TGraphQueryImplementation : XBaseGraphQLQuery
{
//
var isValid = repositoryDescriptor.IsValid();
@@ -808,7 +967,7 @@ namespace xDataService.Helpers
if (isValid)
{
//
- UseXGraphQL(
+ UseXGraphQL(
source,
repositoryDescriptor
);
@@ -851,7 +1010,12 @@ namespace xDataService.Helpers
///
///
///
- public static void AddXKeyGenerator(
+ public static void AddXKeyGenerator<
+ TEntity,
+ TKey,
+ TKeyGeneratorService,
+ TKeyGeneratorImplementation
+ >(
IServiceCollection source,
XRepositoryDescriptor repositoryDescriptor,
ServiceLifetime lifetime = ServiceLifetime.Scoped
@@ -894,7 +1058,12 @@ namespace xDataService.Helpers
///
///
///
- public static void AddXEvents(
+ public static void AddXEvents<
+ TEntity,
+ TKey,
+ TEventsService,
+ TEventsImplementation
+ >(
IServiceCollection source,
XRepositoryDescriptor repositoryDescriptor,
ServiceLifetime lifetime = ServiceLifetime.Scoped
@@ -936,13 +1105,21 @@ namespace xDataService.Helpers
///
///
///
- ///
- ///
+ ///
///
///
///
///
- public static void AddXGraphQL(
+ public static void AddXGraphQL<
+ TEntity,
+ TKey,
+ TGraph,
+ TGraphKey,
+ TGraphQuery,
+ TGraphTypeHelperService,
+ TGraphTypeHelperImplementation,
+ TGraphSchema
+ >(
IServiceCollection source,
XRepositoryDescriptor repositoryDescriptor,
ServiceLifetime lifetime = ServiceLifetime.Scoped
@@ -952,9 +1129,8 @@ namespace xDataService.Helpers
where TEntity : XBaseEntity
where TGraph : XBaseGraphObjectType
where TGraphTypeHelperService : IXBaseGraphQLTypeHelper
+ where TGraphQuery : XBaseGraphQLQuery
where TGraphTypeHelperImplementation : XBaseGraphQLTypeHelper
- where TGraphQueryService : IXBaseGraphQLQuery
- where TGraphQueryImplementation : XBaseGraphQLQuery
{
//
// Validate ...
@@ -962,32 +1138,16 @@ namespace xDataService.Helpers
!source.IsNull() &&
!repositoryDescriptor.IsNull() &&
!repositoryDescriptor.GraphType.IsNull() &&
+ !repositoryDescriptor.GraphQuery.IsNull() &&
!repositoryDescriptor.GraphSchema.IsNull() &&
!repositoryDescriptor.GraphTypeKey.IsNull() &&
- !repositoryDescriptor.GraphQueryService.IsNull() &&
!repositoryDescriptor.GraphTypeHelperService.IsNull() &&
- !repositoryDescriptor.GraphQueryImplementation.IsNull() &&
!repositoryDescriptor.GraphTypeHelperImplementation.IsNull();
if (!isValid)
{
return;
}
- //
- // Register Graph Type ...
- var builder = source.GetRegisteredService();
- if (builder.IsNull())
- {
- //
- Action options = x => { };
- builder = source.AddGraphQL(options)
- .AddNewtonsoftJson(deserializerSettings => { }, serializerSettings => { })
- .AddWebSockets()
- .AddDataLoader()
- .AddGraphTypes();
- }
- builder.AddGraphTypes(repositoryDescriptor.GraphType);
-
//
// Register Graph Schema ...
source.Add(
@@ -1002,8 +1162,8 @@ namespace xDataService.Helpers
// Register Graph Query ...
source.Add(
new ServiceDescriptor(
- repositoryDescriptor.GraphQueryService,
- repositoryDescriptor.GraphQueryImplementation,
+ repositoryDescriptor.GraphQuery,
+ repositoryDescriptor.GraphQuery,
lifetime
)
);
@@ -1017,6 +1177,41 @@ namespace xDataService.Helpers
lifetime: ServiceLifetime.Singleton
)
);
+
+ //
+ // Register Graph Type ...
+ source.Add(
+ new ServiceDescriptor(
+ repositoryDescriptor.GraphType,
+ repositoryDescriptor.GraphType,
+ ServiceLifetime.Singleton
+ )
+ );
+
+ //
+ // Register Graph Events ...
+ source.Add(
+ new ServiceDescriptor(
+ typeof(XBaseGraphQLEventType),
+ typeof(XBaseGraphQLEventType),
+ ServiceLifetime.Singleton
+ )
+ );
+
+ //
+ // Register Graph Type Schema ...
+ var builder = source.GetRegisteredService();
+ if (builder.IsNull())
+ {
+ //
+ Action options = x => { };
+ builder = source.AddGraphQL(options)
+ .AddNewtonsoftJson(deserializerSettings => { }, serializerSettings => { })
+ .AddWebSockets()
+ .AddDataLoader()
+ .AddGraphTypes();
+ }
+ builder.AddGraphTypes(repositoryDescriptor.GraphSchema);
}
///
@@ -1029,13 +1224,21 @@ namespace xDataService.Helpers
///
///
///
- ///
- ///
+ ///
///
///
///
///
- public static void UseXGraphQL(
+ public static void UseXGraphQL<
+ TEntity,
+ TKey,
+ TGraph,
+ TGraphKey,
+ TGraphQuery,
+ TGraphTypeHelperService,
+ TGraphTypeHelperImplementation,
+ TGraphSchema
+ >(
IApplicationBuilder source,
XRepositoryDescriptor repositoryDescriptor
)
@@ -1044,9 +1247,8 @@ namespace xDataService.Helpers
where TEntity : XBaseEntity
where TGraph : XBaseGraphObjectType
where TGraphTypeHelperService : IXBaseGraphQLTypeHelper
+ where TGraphQuery : XBaseGraphQLQuery
where TGraphTypeHelperImplementation : XBaseGraphQLTypeHelper
- where TGraphQueryService : IXBaseGraphQLQuery
- where TGraphQueryImplementation : XBaseGraphQLQuery
{
//
// Validate ...
@@ -1054,11 +1256,10 @@ namespace xDataService.Helpers
!source.IsNull() &&
!repositoryDescriptor.IsNull() &&
!repositoryDescriptor.GraphType.IsNull() &&
+ !repositoryDescriptor.GraphQuery.IsNull() &&
!repositoryDescriptor.GraphSchema.IsNull() &&
!repositoryDescriptor.GraphTypeKey.IsNull() &&
- !repositoryDescriptor.GraphQueryService.IsNull() &&
!repositoryDescriptor.GraphTypeHelperService.IsNull() &&
- !repositoryDescriptor.GraphQueryImplementation.IsNull() &&
!repositoryDescriptor.GraphTypeHelperImplementation.IsNull();
if (!isValid)
{
diff --git a/Models/XRepositoryDescriptor.cs b/Models/XRepositoryDescriptor.cs
index 6fc01f7..48ed6e3 100644
--- a/Models/XRepositoryDescriptor.cs
+++ b/Models/XRepositoryDescriptor.cs
@@ -69,13 +69,7 @@ namespace xDataService.Models
/// Entity GrapQL Query ...
///
///
- public Type GraphQueryService { get; set; } = null;
-
- ///
- /// Entity GrapQL Query ...
- ///
- ///
- public Type GraphQueryImplementation { get; set; } = null;
+ public Type GraphQuery { get; set; } = null;
///
/// Repository Event Provider ...
@@ -133,7 +127,12 @@ namespace xDataService.Models
///
/// a Repository Descriptor ...
///
- public class XRepositoryDescriptor : XRepositoryDescriptor
+ public class XRepositoryDescriptor<
+ TEntity,
+ TKey,
+ TKeyGeneratorService,
+ TKeyGeneratorImplementation
+ > : XRepositoryDescriptor
where TEntity : XBaseEntity
where TKeyGeneratorService : IXKeyGenerator
where TKeyGeneratorImplementation : XKeyGenerator
@@ -149,7 +148,19 @@ namespace xDataService.Models
///
/// a Repository Descriptor ...
///
- public class XRepositoryDescriptor : XRepositoryDescriptor
+ public class XRepositoryDescriptor<
+ TEntity,
+ TKey,
+ TKeyGeneratorService,
+ TKeyGeneratorImplementation,
+ TEventsService,
+ TEventsImplementation
+ > : XRepositoryDescriptor<
+ TEntity,
+ TKey,
+ TKeyGeneratorService,
+ TKeyGeneratorImplementation
+ >
where TEntity : XBaseEntity
where TEventsService : IXBaseRepositoryEvents
where TKeyGeneratorService : IXKeyGenerator
@@ -167,7 +178,27 @@ namespace xDataService.Models
///
/// a Repository Descriptor ...
///
- public class XRepositoryDescriptor : XRepositoryDescriptor
+ public class XRepositoryDescriptor<
+ TEntity,
+ TKey,
+ TKeyGeneratorService,
+ TKeyGeneratorImplementation,
+ TEventsService,
+ TEventsImplementation,
+ TGraph,
+ TGraphKey,
+ TGraphQuery,
+ TGraphTypeHelperService,
+ TGraphTypeHelperImplementation,
+ TGraphSchema
+ > : XRepositoryDescriptor<
+ TEntity,
+ TKey,
+ TKeyGeneratorService,
+ TKeyGeneratorImplementation,
+ TEventsService,
+ TEventsImplementation
+ >
where TGraphSchema : Schema
where TGraphKey : IGraphType
where TEntity : XBaseEntity
@@ -177,19 +208,17 @@ namespace xDataService.Models
where TEventsImplementation : XBaseRepositoryEvents
where TKeyGeneratorImplementation : XKeyGenerator
where TGraphTypeHelperService : IXBaseGraphQLTypeHelper
+ where TGraphQuery : XBaseGraphQLQuery
where TGraphTypeHelperImplementation : XBaseGraphQLTypeHelper
- where TGraphQueryService : IXBaseGraphQLQuery
- where TGraphQueryImplementation : XBaseGraphQLQuery
{
public XRepositoryDescriptor() : base()
{
//
GraphType = typeof(TGraph);
GraphTypeKey = typeof(TGraphKey);
+ GraphQuery = typeof(TGraphQuery);
GraphSchema = typeof(TGraphSchema);
- GraphQueryService = typeof(TGraphQueryService);
GraphTypeHelperService = typeof(TGraphTypeHelperService);
- GraphQueryImplementation = typeof(TGraphQueryImplementation);
GraphTypeHelperImplementation = typeof(TGraphTypeHelperImplementation);
}
}
@@ -197,7 +226,35 @@ namespace xDataService.Models
///
/// a Repository Descriptor ...
///
- public class XInMemoryRepositoryDescriptor : XRepositoryDescriptor
+ public class XInMemoryRepositoryDescriptor<
+ TEntity,
+ TKey,
+ TKeyGeneratorService,
+ TKeyGeneratorImplementation,
+ TEventsService,
+ TEventsImplementation,
+ TGraph,
+ TGraphKey,
+ TGraphQuery,
+ TGraphTypeHelperService,
+ TGraphTypeHelperImplementation,
+ TGraphSchema,
+ TRepositoryService,
+ TRepositoryImplementation
+ > : XRepositoryDescriptor<
+ TEntity,
+ TKey,
+ TKeyGeneratorService,
+ TKeyGeneratorImplementation,
+ TEventsService,
+ TEventsImplementation,
+ TGraph,
+ TGraphKey,
+ TGraphQuery,
+ TGraphTypeHelperService,
+ TGraphTypeHelperImplementation,
+ TGraphSchema
+ >
where TGraphSchema : Schema
where TGraphKey : IGraphType
where TEntity : XBaseEntity
@@ -209,9 +266,8 @@ namespace xDataService.Models
where TKeyGeneratorImplementation : XKeyGenerator
where TGraphTypeHelperService : IXBaseGraphQLTypeHelper
where TRepositoryImplementation : XBaseInMemoryRepositoy
+ where TGraphQuery : XBaseGraphQLQuery
where TGraphTypeHelperImplementation : XBaseGraphQLTypeHelper
- where TGraphQueryService : IXBaseGraphQLQuery
- where TGraphQueryImplementation : XBaseGraphQLQuery
{
public XInMemoryRepositoryDescriptor() : base()
{
@@ -224,7 +280,35 @@ namespace xDataService.Models
///
/// a Repository Descriptor ...
///
- public class XMongoRepositoryDescriptor : XRepositoryDescriptor
+ public class XMongoRepositoryDescriptor<
+ TEntity,
+ TKey,
+ TKeyGeneratorService,
+ TKeyGeneratorImplementation,
+ TEventsService,
+ TEventsImplementation,
+ TGraph,
+ TGraphKey,
+ TGraphQuery,
+ TGraphTypeHelperService,
+ TGraphTypeHelperImplementation,
+ TGraphSchema,
+ TRepositoryService,
+ TRepositoryImplementation
+ > : XRepositoryDescriptor<
+ TEntity,
+ TKey,
+ TKeyGeneratorService,
+ TKeyGeneratorImplementation,
+ TEventsService,
+ TEventsImplementation,
+ TGraph,
+ TGraphKey,
+ TGraphQuery,
+ TGraphTypeHelperService,
+ TGraphTypeHelperImplementation,
+ TGraphSchema
+ >
where TGraphSchema : Schema
where TGraphKey : IGraphType
where TEntity : XBaseEntity
@@ -236,9 +320,8 @@ namespace xDataService.Models
where TKeyGeneratorImplementation : XKeyGenerator
where TRepositoryImplementation : XBaseMongoRepository
where TGraphTypeHelperService : IXBaseGraphQLTypeHelper
+ where TGraphQuery : XBaseGraphQLQuery
where TGraphTypeHelperImplementation : XBaseGraphQLTypeHelper
- where TGraphQueryService : IXBaseGraphQLQuery
- where TGraphQueryImplementation : XBaseGraphQLQuery
{
public XMongoRepositoryDescriptor() : base()
{
@@ -251,7 +334,36 @@ namespace xDataService.Models
///
/// a Repository Descriptor ...
///
- public class XEFRepositoryDescriptor : XRepositoryDescriptor
+ public class XEFRepositoryDescriptor<
+ TEntity,
+ TKey,
+ TKeyGeneratorService,
+ TKeyGeneratorImplementation,
+ TEventsService,
+ TEventsImplementation,
+ TGraph,
+ TGraphKey,
+ TGraphQuery,
+ TGraphTypeHelperService,
+ TGraphTypeHelperImplementation,
+ TGraphSchema,
+ TRepositoryService,
+ TRepositoryImplementation,
+ TContext
+ > : XRepositoryDescriptor<
+ TEntity,
+ TKey,
+ TKeyGeneratorService,
+ TKeyGeneratorImplementation,
+ TEventsService,
+ TEventsImplementation,
+ TGraph,
+ TGraphKey,
+ TGraphQuery,
+ TGraphTypeHelperService,
+ TGraphTypeHelperImplementation,
+ TGraphSchema
+ >
where TGraphSchema : Schema
where TContext : XDbContext
where TGraphKey : IGraphType
@@ -263,10 +375,9 @@ namespace xDataService.Models
where TEventsImplementation : XBaseRepositoryEvents
where TKeyGeneratorImplementation : XKeyGenerator
where TGraphTypeHelperService : IXBaseGraphQLTypeHelper
+ where TGraphQuery : XBaseGraphQLQuery
where TRepositoryImplementation : XBaseEFRepository
where TGraphTypeHelperImplementation : XBaseGraphQLTypeHelper
- where TGraphQueryService : IXBaseGraphQLQuery
- where TGraphQueryImplementation : XBaseGraphQLQuery
{
public XEFRepositoryDescriptor() : base()
{
diff --git a/Providers/XLongKeyGenerator.cs b/Providers/XLongKeyGenerator.cs
new file mode 100644
index 0000000..3efc073
--- /dev/null
+++ b/Providers/XLongKeyGenerator.cs
@@ -0,0 +1,45 @@
+using System.Linq;
+using System.Threading;
+using System.Threading.Tasks;
+using xCommons.Extensions;
+using xDataService.Extensions;
+using xDataService.Interfaces;
+using xModels.Base;
+
+namespace xDataService.Providers
+{
+ ///
+ /// Default Long Key Generator ...
+ ///
+ ///
+ public class XLongKeyGenerator : XKeyGenerator, IXKeyGenerator
+ where TEntity : XBaseEntity
+ {
+ public override async Task GenerateKey(
+ IXBaseRepository repository,
+ CancellationToken cancellationToken = default
+ )
+ {
+ //
+ var items = (await repository.GetAllAsync())
+ .OrderByDescending(nameof(XBaseEntity.Id));
+ var last = items
+ .FirstOrDefault();
+
+ //
+ var result = last.IsNull() ? 1 : last.Id + 1;
+
+ //
+ return result;
+ }
+
+ public override bool IsEmpty(long id)
+ {
+ //
+ var result = id <= 0;
+
+ //
+ return result;
+ }
+ }
+}
\ No newline at end of file