fix DynamicQueryController removed Generic that shouldn't have been removed in the first place, causing run time issues with MakeGeneric
This commit is contained in:
parent
c230d039f2
commit
e58b86c0fb
@ -8,7 +8,7 @@ using PoweredSoft.DynamicQuery.Core;
|
|||||||
namespace OpenHarbor.CQRS.DynamicQuery.AspNetCore.Mvc;
|
namespace OpenHarbor.CQRS.DynamicQuery.AspNetCore.Mvc;
|
||||||
|
|
||||||
[ApiController, Route("api/query/[controller]")]
|
[ApiController, Route("api/query/[controller]")]
|
||||||
public class DynamicQueryController<TSource, TDestination> : Controller
|
public class DynamicQueryController<TUnderlyingQuery, TSource, TDestination> : Controller
|
||||||
where TSource : class
|
where TSource : class
|
||||||
where TDestination : class
|
where TDestination : class
|
||||||
{
|
{
|
||||||
@ -34,7 +34,7 @@ public class DynamicQueryController<TSource, TDestination> : Controller
|
|||||||
}
|
}
|
||||||
|
|
||||||
[ApiController, Route("api/query/[controller]")]
|
[ApiController, Route("api/query/[controller]")]
|
||||||
public class DynamicQueryController<TSource, TDestination, TParams> : Controller
|
public class DynamicQueryController<TUnderlyingQuery, TSource, TDestination, TParams> : Controller
|
||||||
where TSource : class
|
where TSource : class
|
||||||
where TDestination : class
|
where TDestination : class
|
||||||
where TParams : class
|
where TParams : class
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Diagnostics.CodeAnalysis;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using Microsoft.AspNetCore.Mvc.ApplicationParts;
|
using Microsoft.AspNetCore.Mvc.ApplicationParts;
|
||||||
using Microsoft.AspNetCore.Mvc.Controllers;
|
using Microsoft.AspNetCore.Mvc.Controllers;
|
||||||
@ -9,18 +10,43 @@ using OpenHarbor.CQRS.DynamicQuery.Discover;
|
|||||||
|
|
||||||
namespace OpenHarbor.CQRS.DynamicQuery.AspNetCore.Mvc;
|
namespace OpenHarbor.CQRS.DynamicQuery.AspNetCore.Mvc;
|
||||||
|
|
||||||
public class DynamicQueryControllerFeatureProvider : IApplicationFeatureProvider<ControllerFeature>
|
public class DynamicQueryControllerFeatureProvider(ServiceProvider serviceProvider)
|
||||||
|
: IApplicationFeatureProvider<ControllerFeature>
|
||||||
{
|
{
|
||||||
private readonly ServiceProvider _serviceProvider;
|
|
||||||
|
|
||||||
public DynamicQueryControllerFeatureProvider(ServiceProvider serviceProvider)
|
/**
|
||||||
|
* public void PopulateFeature(IEnumerable<ApplicationPart> parts, ControllerFeature feature)
|
||||||
{
|
{
|
||||||
_serviceProvider = serviceProvider;
|
var queryDiscovery = this.serviceProvider.GetRequiredService<IQueryDiscovery>();
|
||||||
}
|
foreach (var f in queryDiscovery.GetQueries())
|
||||||
|
{
|
||||||
|
var ignoreAttribute = f.QueryType.GetCustomAttribute<QueryControllerIgnoreAttribute>();
|
||||||
|
if (ignoreAttribute != null)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (f.Category != "DynamicQuery")
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (f is DynamicQueryMeta dynamicQueryMeta)
|
||||||
|
{
|
||||||
|
if (dynamicQueryMeta.ParamsType == null)
|
||||||
|
{
|
||||||
|
var controllerType = typeof(DynamicQueryController<,,>).MakeGenericType(f.QueryType, dynamicQueryMeta.SourceType, dynamicQueryMeta.DestinationType);
|
||||||
|
var controllerTypeInfo = controllerType.GetTypeInfo();
|
||||||
|
feature.Controllers.Add(controllerTypeInfo);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var controllerType = typeof(DynamicQueryController<,,,>).MakeGenericType(f.QueryType, dynamicQueryMeta.SourceType, dynamicQueryMeta.DestinationType, dynamicQueryMeta.ParamsType);
|
||||||
|
var controllerTypeInfo = controllerType.GetTypeInfo();
|
||||||
|
feature.Controllers.Add(controllerTypeInfo);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*/
|
||||||
public void PopulateFeature(IEnumerable<ApplicationPart> parts, ControllerFeature feature)
|
public void PopulateFeature(IEnumerable<ApplicationPart> parts, ControllerFeature feature)
|
||||||
{
|
{
|
||||||
var queryDiscovery = _serviceProvider.GetRequiredService<IQueryDiscovery>();
|
var queryDiscovery = serviceProvider.GetRequiredService<IQueryDiscovery>();
|
||||||
foreach (var queryMeta in queryDiscovery.GetQueries())
|
foreach (var queryMeta in queryDiscovery.GetQueries())
|
||||||
{
|
{
|
||||||
var ignoreAttribute = queryMeta.QueryType.GetCustomAttribute<QueryControllerIgnoreAttribute>();
|
var ignoreAttribute = queryMeta.QueryType.GetCustomAttribute<QueryControllerIgnoreAttribute>();
|
||||||
@ -32,15 +58,19 @@ public class DynamicQueryControllerFeatureProvider : IApplicationFeatureProvider
|
|||||||
|
|
||||||
if (queryMeta is DynamicQueryMeta dynamicQueryMeta)
|
if (queryMeta is DynamicQueryMeta dynamicQueryMeta)
|
||||||
{
|
{
|
||||||
|
// todo: add better error output for the user
|
||||||
|
|
||||||
if (dynamicQueryMeta.ParamsType == null)
|
if (dynamicQueryMeta.ParamsType == null)
|
||||||
{
|
{
|
||||||
var controllerType = typeof(DynamicQueryController<,>).MakeGenericType(queryMeta.QueryType, dynamicQueryMeta.SourceType, dynamicQueryMeta.DestinationType);
|
// todo: not aot friendly
|
||||||
|
var controllerType = typeof(DynamicQueryController<,,>).MakeGenericType(queryMeta.QueryType, dynamicQueryMeta.SourceType, dynamicQueryMeta.DestinationType);
|
||||||
var controllerTypeInfo = controllerType.GetTypeInfo();
|
var controllerTypeInfo = controllerType.GetTypeInfo();
|
||||||
feature.Controllers.Add(controllerTypeInfo);
|
feature.Controllers.Add(controllerTypeInfo);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
var controllerType = typeof(DynamicQueryController<,,>).MakeGenericType(queryMeta.QueryType, dynamicQueryMeta.SourceType, dynamicQueryMeta.DestinationType, dynamicQueryMeta.ParamsType);
|
// todo: not aot friendly
|
||||||
|
var controllerType = typeof(DynamicQueryController<,,,>).MakeGenericType(queryMeta.QueryType, dynamicQueryMeta.SourceType, dynamicQueryMeta.DestinationType, dynamicQueryMeta.ParamsType);
|
||||||
var controllerTypeInfo = controllerType.GetTypeInfo();
|
var controllerTypeInfo = controllerType.GetTypeInfo();
|
||||||
feature.Controllers.Add(controllerTypeInfo);
|
feature.Controllers.Add(controllerTypeInfo);
|
||||||
}
|
}
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<FrameworkReference Include="Microsoft.AspNetCore.App" />
|
<FrameworkReference Include="Microsoft.AspNetCore.App" />gi
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
Loading…
Reference in New Issue
Block a user