diff --git a/src/Types/Configuration/IDataLoaderConfiguration.cs b/src/Types/Configuration/IDataLoaderConfiguration.cs index 4a6c8ecefaa..ef5157c96fe 100644 --- a/src/Types/Configuration/IDataLoaderConfiguration.cs +++ b/src/Types/Configuration/IDataLoaderConfiguration.cs @@ -8,6 +8,12 @@ namespace HotChocolate.Configuration public interface IDataLoaderConfiguration : IFluent { + void RegisterDataLoader(Type type, + string key, + ExecutionScope scope, + Func loaderFactory = null, + Func triggerLoaderAsync = null); + void RegisterDataLoader( string key, ExecutionScope scope, diff --git a/src/Types/Configuration/SchemaConfiguration.DataLoader.cs b/src/Types/Configuration/SchemaConfiguration.DataLoader.cs index 4c73add3423..ebd78fe3168 100644 --- a/src/Types/Configuration/SchemaConfiguration.DataLoader.cs +++ b/src/Types/Configuration/SchemaConfiguration.DataLoader.cs @@ -15,12 +15,12 @@ internal partial class SchemaConfiguration internal IReadOnlyCollection DataLoaderDescriptors => _dataLoaders.Values; - public void RegisterDataLoader( + public void RegisterDataLoader(Type type, string key, ExecutionScope scope, - Func loaderFactory = null, - Func triggerLoaderAsync = null) - { + Func loaderFactory = null, + Func triggerLoaderAsync = null){ + if (key == null) { throw new ArgumentNullException(nameof(key)); @@ -29,22 +29,37 @@ public void RegisterDataLoader( Func factory = null; if (loaderFactory != null) { - factory = new Func( - sp => loaderFactory(sp)); + factory = loaderFactory; } TriggerDataLoaderAsync trigger = null; if (triggerLoaderAsync != null) { - trigger = new TriggerDataLoaderAsync( - (o, c) => triggerLoaderAsync((T)o, c)); + trigger = (o, c) => triggerLoaderAsync(o, c); } var descriptor = new DataLoaderDescriptor( - key, typeof(T), scope, + key, type, scope, factory, trigger); _dataLoaders[key] = descriptor; } + public void RegisterDataLoader( + string key, + ExecutionScope scope, + Func loaderFactory = null, + Func triggerLoaderAsync = null) + { + + Func f = null; + if(loaderFactory != null) + f = s => loaderFactory(s); + Func g = null; + if(triggerLoaderAsync != null) + g = (a,b) => triggerLoaderAsync((T)a,b); + + RegisterDataLoader(typeof(T),key,scope,f,g); + + } } }