diff --git a/src/Examples/GettingStarted/Controllers/ArticlesController.cs b/src/Examples/GettingStarted/Controllers/ArticlesController.cs index 2bc928a46f..fec9d3e38d 100644 --- a/src/Examples/GettingStarted/Controllers/ArticlesController.cs +++ b/src/Examples/GettingStarted/Controllers/ArticlesController.cs @@ -2,6 +2,7 @@ using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; +using Microsoft.Extensions.Logging; namespace GettingStarted { @@ -9,8 +10,9 @@ public class ArticlesController : JsonApiController
{ public ArticlesController( IJsonApiOptions jsonApiOptions, + ILoggerFactory loggerFactory, IResourceService
resourceService) - : base(jsonApiOptions, resourceService) + : base(jsonApiOptions, loggerFactory, resourceService) { } } } diff --git a/src/Examples/GettingStarted/Controllers/PeopleController.cs b/src/Examples/GettingStarted/Controllers/PeopleController.cs index 95eac64346..68ff5932ea 100644 --- a/src/Examples/GettingStarted/Controllers/PeopleController.cs +++ b/src/Examples/GettingStarted/Controllers/PeopleController.cs @@ -2,6 +2,7 @@ using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; +using Microsoft.Extensions.Logging; namespace GettingStarted { @@ -9,8 +10,9 @@ public class PeopleController : JsonApiController { public PeopleController( IJsonApiOptions jsonApiOptions, + ILoggerFactory loggerFactory, IResourceService resourceService) - : base(jsonApiOptions, resourceService) + : base(jsonApiOptions, loggerFactory, resourceService) { } } } diff --git a/src/Examples/GettingStarted/ResourceDefinitionExample/ModelsController.cs b/src/Examples/GettingStarted/ResourceDefinitionExample/ModelsController.cs index 1b488ed383..52478823f8 100644 --- a/src/Examples/GettingStarted/ResourceDefinitionExample/ModelsController.cs +++ b/src/Examples/GettingStarted/ResourceDefinitionExample/ModelsController.cs @@ -1,6 +1,7 @@ using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; +using Microsoft.Extensions.Logging; namespace GettingStarted.ResourceDefinitionExample { @@ -8,8 +9,9 @@ public class ModelsController : JsonApiController { public ModelsController( IJsonApiOptions jsonApiOptions, + ILoggerFactory loggerFactory, IResourceService resourceService) - : base(jsonApiOptions, resourceService) + : base(jsonApiOptions, loggerFactory, resourceService) { } } } diff --git a/src/Examples/JsonApiDotNetCoreExample/Controllers/ArticlesController.cs b/src/Examples/JsonApiDotNetCoreExample/Controllers/ArticlesController.cs index faa533093c..ab64bf2c45 100644 --- a/src/Examples/JsonApiDotNetCoreExample/Controllers/ArticlesController.cs +++ b/src/Examples/JsonApiDotNetCoreExample/Controllers/ArticlesController.cs @@ -2,6 +2,7 @@ using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; using JsonApiDotNetCoreExample.Models; +using Microsoft.Extensions.Logging; namespace JsonApiDotNetCoreExample.Controllers { @@ -9,8 +10,9 @@ public class ArticlesController : JsonApiController
{ public ArticlesController( IJsonApiOptions jsonApiOptions, - IResourceService
resourceService) - : base(jsonApiOptions, resourceService) + ILoggerFactory loggerFactory, + IResourceService
resourceService) + : base(jsonApiOptions, loggerFactory, resourceService) { } } } diff --git a/src/Examples/JsonApiDotNetCoreExample/Controllers/CamelCasedModelsController.cs b/src/Examples/JsonApiDotNetCoreExample/Controllers/CamelCasedModelsController.cs index 01db4c2720..588b474c28 100644 --- a/src/Examples/JsonApiDotNetCoreExample/Controllers/CamelCasedModelsController.cs +++ b/src/Examples/JsonApiDotNetCoreExample/Controllers/CamelCasedModelsController.cs @@ -10,9 +10,9 @@ public class KebabCasedModelsController : JsonApiController { public KebabCasedModelsController( IJsonApiOptions jsonApiOptions, - IResourceService resourceService, - ILoggerFactory loggerFactory) - : base(jsonApiOptions, resourceService, loggerFactory) + ILoggerFactory loggerFactory, + IResourceService resourceService) + : base(jsonApiOptions, loggerFactory, resourceService) { } } } diff --git a/src/Examples/JsonApiDotNetCoreExample/Controllers/PassportsController.cs b/src/Examples/JsonApiDotNetCoreExample/Controllers/PassportsController.cs index a040ff21e4..1f38c6aee6 100644 --- a/src/Examples/JsonApiDotNetCoreExample/Controllers/PassportsController.cs +++ b/src/Examples/JsonApiDotNetCoreExample/Controllers/PassportsController.cs @@ -8,11 +8,11 @@ namespace JsonApiDotNetCoreExample.Controllers { public class PassportsController : JsonApiController { - public PassportsController(IJsonApiOptions jsonApiOptions, - IResourceService resourceService, - ILoggerFactory loggerFactory = null) - : base(jsonApiOptions, resourceService, loggerFactory) - { - } + public PassportsController( + IJsonApiOptions jsonApiOptions, + ILoggerFactory loggerFactory, + IResourceService resourceService) + : base(jsonApiOptions, loggerFactory, resourceService) + { } } } diff --git a/src/Examples/JsonApiDotNetCoreExample/Controllers/PeopleController.cs b/src/Examples/JsonApiDotNetCoreExample/Controllers/PeopleController.cs index 851b2cfc80..85a00aaa02 100644 --- a/src/Examples/JsonApiDotNetCoreExample/Controllers/PeopleController.cs +++ b/src/Examples/JsonApiDotNetCoreExample/Controllers/PeopleController.cs @@ -10,9 +10,9 @@ public class PeopleController : JsonApiController { public PeopleController( IJsonApiOptions jsonApiOptions, - IResourceService resourceService, - ILoggerFactory loggerFactory) - : base(jsonApiOptions, resourceService, loggerFactory) + ILoggerFactory loggerFactory, + IResourceService resourceService) + : base(jsonApiOptions, loggerFactory, resourceService) { } } } diff --git a/src/Examples/JsonApiDotNetCoreExample/Controllers/PersonRolesController.cs b/src/Examples/JsonApiDotNetCoreExample/Controllers/PersonRolesController.cs index bee457a1cb..f11e2cee5a 100644 --- a/src/Examples/JsonApiDotNetCoreExample/Controllers/PersonRolesController.cs +++ b/src/Examples/JsonApiDotNetCoreExample/Controllers/PersonRolesController.cs @@ -10,9 +10,9 @@ public class PersonRolesController : JsonApiController { public PersonRolesController( IJsonApiOptions jsonApiOptions, - IResourceService resourceService, - ILoggerFactory loggerFactory) - : base(jsonApiOptions, resourceService, loggerFactory) + ILoggerFactory loggerFactory, + IResourceService resourceService) + : base(jsonApiOptions, loggerFactory, resourceService) { } } } diff --git a/src/Examples/JsonApiDotNetCoreExample/Controllers/TagsController.cs b/src/Examples/JsonApiDotNetCoreExample/Controllers/TagsController.cs index 5167f317ec..24a5de6931 100644 --- a/src/Examples/JsonApiDotNetCoreExample/Controllers/TagsController.cs +++ b/src/Examples/JsonApiDotNetCoreExample/Controllers/TagsController.cs @@ -10,9 +10,9 @@ public class TagsController : JsonApiController { public TagsController( IJsonApiOptions jsonApiOptions, - IResourceService resourceService, - ILoggerFactory loggerFactory) - : base(jsonApiOptions, resourceService, loggerFactory) + ILoggerFactory loggerFactory, + IResourceService resourceService) + : base(jsonApiOptions, loggerFactory, resourceService) { } } } diff --git a/src/Examples/JsonApiDotNetCoreExample/Controllers/TodoCollectionsController.cs b/src/Examples/JsonApiDotNetCoreExample/Controllers/TodoCollectionsController.cs index d300e24f46..8bf3a95539 100644 --- a/src/Examples/JsonApiDotNetCoreExample/Controllers/TodoCollectionsController.cs +++ b/src/Examples/JsonApiDotNetCoreExample/Controllers/TodoCollectionsController.cs @@ -4,7 +4,6 @@ using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Data; -using JsonApiDotNetCore.Internal.Contracts; using JsonApiDotNetCore.Services; using JsonApiDotNetCoreExample.Models; using Microsoft.AspNetCore.Mvc; @@ -18,11 +17,11 @@ public class TodoCollectionsController : JsonApiController resourceService, - ILoggerFactory loggerFactory) - : base(jsonApiOptions, resourceService, loggerFactory) + IJsonApiOptions jsonApiOptions, + ILoggerFactory loggerFactory, + IDbContextResolver contextResolver, + IResourceService resourceService) + : base(jsonApiOptions, loggerFactory, resourceService) { _dbResolver = contextResolver; } diff --git a/src/Examples/JsonApiDotNetCoreExample/Controllers/TodoItemsController.cs b/src/Examples/JsonApiDotNetCoreExample/Controllers/TodoItemsController.cs index 818e082db9..ea8dbf8359 100644 --- a/src/Examples/JsonApiDotNetCoreExample/Controllers/TodoItemsController.cs +++ b/src/Examples/JsonApiDotNetCoreExample/Controllers/TodoItemsController.cs @@ -10,9 +10,9 @@ public class TodoItemsController : JsonApiController { public TodoItemsController( IJsonApiOptions jsonApiOptions, - IResourceService resourceService, - ILoggerFactory loggerFactory) - : base(jsonApiOptions, resourceService, loggerFactory) + ILoggerFactory loggerFactory, + IResourceService resourceService) + : base(jsonApiOptions, loggerFactory, resourceService) { } } } diff --git a/src/Examples/JsonApiDotNetCoreExample/Controllers/TodoItemsTestController.cs b/src/Examples/JsonApiDotNetCoreExample/Controllers/TodoItemsTestController.cs index 971f579b69..379b1dd2ba 100644 --- a/src/Examples/JsonApiDotNetCoreExample/Controllers/TodoItemsTestController.cs +++ b/src/Examples/JsonApiDotNetCoreExample/Controllers/TodoItemsTestController.cs @@ -13,9 +13,9 @@ public abstract class AbstractTodoItemsController { protected AbstractTodoItemsController( IJsonApiOptions jsonApiOptions, - IResourceService service, - ILoggerFactory loggerFactory) - : base(jsonApiOptions, service, loggerFactory) + ILoggerFactory loggerFactory, + IResourceService service) + : base(jsonApiOptions, loggerFactory, service) { } } @@ -24,9 +24,9 @@ public class TodoItemsTestController : AbstractTodoItemsController { public TodoItemsTestController( IJsonApiOptions jsonApiOptions, - IResourceService service, - ILoggerFactory loggerFactory) - : base(jsonApiOptions, service, loggerFactory) + ILoggerFactory loggerFactory, + IResourceService service) + : base(jsonApiOptions, loggerFactory, service) { } } } diff --git a/src/Examples/JsonApiDotNetCoreExample/Controllers/UsersController.cs b/src/Examples/JsonApiDotNetCoreExample/Controllers/UsersController.cs index de1996d5e5..e96bed2517 100644 --- a/src/Examples/JsonApiDotNetCoreExample/Controllers/UsersController.cs +++ b/src/Examples/JsonApiDotNetCoreExample/Controllers/UsersController.cs @@ -10,9 +10,9 @@ public class UsersController : JsonApiController { public UsersController( IJsonApiOptions jsonApiOptions, - IResourceService resourceService, - ILoggerFactory loggerFactory) - : base(jsonApiOptions, resourceService, loggerFactory) + ILoggerFactory loggerFactory, + IResourceService resourceService) + : base(jsonApiOptions, loggerFactory, resourceService) { } } @@ -20,9 +20,9 @@ public class SuperUsersController : JsonApiController { public SuperUsersController( IJsonApiOptions jsonApiOptions, - IResourceService resourceService, - ILoggerFactory loggerFactory) - : base(jsonApiOptions, resourceService, loggerFactory) + ILoggerFactory loggerFactory, + IResourceService resourceService) + : base(jsonApiOptions, loggerFactory, resourceService) { } } } diff --git a/src/Examples/JsonApiDotNetCoreExample/Services/CustomArticleService.cs b/src/Examples/JsonApiDotNetCoreExample/Services/CustomArticleService.cs index d34f32756d..8b7d07a15b 100644 --- a/src/Examples/JsonApiDotNetCoreExample/Services/CustomArticleService.cs +++ b/src/Examples/JsonApiDotNetCoreExample/Services/CustomArticleService.cs @@ -14,13 +14,15 @@ namespace JsonApiDotNetCoreExample.Services { public class CustomArticleService : DefaultResourceService
{ - public CustomArticleService(IEnumerable queryParameters, - IJsonApiOptions options, - IResourceRepository repository, - IResourceContextProvider provider, - IResourceHookExecutor hookExecutor = null, - ILoggerFactory loggerFactory = null) - : base(queryParameters, options, repository, provider, hookExecutor, loggerFactory) { } + public CustomArticleService( + IEnumerable queryParameters, + IJsonApiOptions options, + ILoggerFactory loggerFactory, + IResourceRepository repository, + IResourceContextProvider provider, + IResourceHookExecutor hookExecutor = null) + : base(queryParameters, options, loggerFactory, repository, provider, hookExecutor) + { } public override async Task
GetAsync(int id) { diff --git a/src/Examples/JsonApiDotNetCoreExample/Startups/NoDefaultPageSizeStartup.cs b/src/Examples/JsonApiDotNetCoreExample/Startups/NoDefaultPageSizeStartup.cs index 489385f76d..facfd2bb42 100644 --- a/src/Examples/JsonApiDotNetCoreExample/Startups/NoDefaultPageSizeStartup.cs +++ b/src/Examples/JsonApiDotNetCoreExample/Startups/NoDefaultPageSizeStartup.cs @@ -1,6 +1,5 @@ using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Logging; using JsonApiDotNetCoreExample.Data; using Microsoft.EntityFrameworkCore; using JsonApiDotNetCore.Extensions; @@ -18,14 +17,8 @@ public NoDefaultPageSizeStartup(IWebHostEnvironment env) : base(env) { } public override void ConfigureServices(IServiceCollection services) { - var loggerFactory = new LoggerFactory(); var mvcBuilder = services.AddMvcCore(); services - .AddSingleton(loggerFactory) - .AddLogging(builder => - { - builder.AddConsole(); - }) .AddDbContext(options => options.UseNpgsql(GetDbConnectionString()), ServiceLifetime.Transient) .AddJsonApi(options => { options.Namespace = "api/v1"; diff --git a/src/Examples/JsonApiDotNetCoreExample/Startups/Startup.cs b/src/Examples/JsonApiDotNetCoreExample/Startups/Startup.cs index 5f9c4c979c..cc5341026a 100644 --- a/src/Examples/JsonApiDotNetCoreExample/Startups/Startup.cs +++ b/src/Examples/JsonApiDotNetCoreExample/Startups/Startup.cs @@ -2,12 +2,10 @@ using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Logging; using JsonApiDotNetCoreExample.Data; using Microsoft.EntityFrameworkCore; using JsonApiDotNetCore.Extensions; using System; -using Microsoft.Extensions.Logging.Debug; namespace JsonApiDotNetCoreExample { @@ -27,19 +25,12 @@ public Startup(IWebHostEnvironment env) public virtual void ConfigureServices(IServiceCollection services) { - var loggerFactory = new LoggerFactory(); services - .AddSingleton(loggerFactory) - .AddLogging(builder => - { - builder.AddConsole(); - builder.AddConfiguration(Config.GetSection("Logging")); - }) .AddDbContext(options => { - options.UseLoggerFactory(new LoggerFactory(new[] { new DebugLoggerProvider() })) - .EnableSensitiveDataLogging() - .UseNpgsql(GetDbConnectionString(), options => options.SetPostgresVersion(new Version(9,6))); + options + .EnableSensitiveDataLogging() + .UseNpgsql(GetDbConnectionString(), options => options.SetPostgresVersion(new Version(9,6))); }, ServiceLifetime.Transient) .AddJsonApi(options => { diff --git a/src/Examples/JsonApiDotNetCoreExample/appsettings.json b/src/Examples/JsonApiDotNetCoreExample/appsettings.json index ef76af7eee..58ef17a7a4 100644 --- a/src/Examples/JsonApiDotNetCoreExample/appsettings.json +++ b/src/Examples/JsonApiDotNetCoreExample/appsettings.json @@ -5,7 +5,7 @@ "Logging": { "IncludeScopes": false, "LogLevel": { - "Default": "Warning", + "Default": "Debug", "System": "Warning", "Microsoft": "Warning", "Microsoft.EntityFrameworkCore": "Debug" diff --git a/src/Examples/NoEntityFrameworkExample/Controllers/TodoItemsController.cs b/src/Examples/NoEntityFrameworkExample/Controllers/TodoItemsController.cs index cf18987700..c21ee5a837 100644 --- a/src/Examples/NoEntityFrameworkExample/Controllers/TodoItemsController.cs +++ b/src/Examples/NoEntityFrameworkExample/Controllers/TodoItemsController.cs @@ -10,9 +10,9 @@ public class TodoItemsController : JsonApiController { public TodoItemsController( IJsonApiOptions jsonApiOptions, - IResourceService resourceService, - ILoggerFactory loggerFactory) - : base(jsonApiOptions, resourceService, loggerFactory) + ILoggerFactory loggerFactory, + IResourceService resourceService) + : base(jsonApiOptions, loggerFactory, resourceService) { } } } diff --git a/src/Examples/NoEntityFrameworkExample/Startup.cs b/src/Examples/NoEntityFrameworkExample/Startup.cs index f21f59c7ba..d9d27f9b00 100644 --- a/src/Examples/NoEntityFrameworkExample/Startup.cs +++ b/src/Examples/NoEntityFrameworkExample/Startup.cs @@ -4,7 +4,6 @@ using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Logging; using NoEntityFrameworkExample.Services; using Microsoft.EntityFrameworkCore; using NoEntityFrameworkExample.Data; @@ -31,11 +30,7 @@ public virtual void ConfigureServices(IServiceCollection services) { // Add framework services. var mvcBuilder = services.AddMvcCore(); - services.AddLogging(builder => - { - builder.AddConfiguration(Configuration.GetSection("Logging")); - builder.AddConsole(); - }).AddJsonApi( + services.AddJsonApi( options => options.Namespace = "api/v1", resources: resources => resources.AddResource("todoItems"), mvcBuilder: mvcBuilder diff --git a/src/Examples/ReportsExample/Controllers/ReportsController.cs b/src/Examples/ReportsExample/Controllers/ReportsController.cs index 77099fe380..59c985b910 100644 --- a/src/Examples/ReportsExample/Controllers/ReportsController.cs +++ b/src/Examples/ReportsExample/Controllers/ReportsController.cs @@ -2,18 +2,20 @@ using Microsoft.AspNetCore.Mvc; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; -using JsonApiDotNetCore.Configuration; -using JsonApiDotNetCore.Internal.Contracts; - +using JsonApiDotNetCore.Configuration; +using Microsoft.Extensions.Logging; +using ReportsExample.Models; + namespace ReportsExample.Controllers { [Route("api/[controller]")] public class ReportsController : BaseJsonApiController { public ReportsController( - IJsonApiOptions jsonApiOptions, + IJsonApiOptions jsonApiOptions, + ILoggerFactory loggerFactory, IGetAllService getAll) - : base(jsonApiOptions, getAll: getAll) + : base(jsonApiOptions, loggerFactory, getAll) { } [HttpGet] diff --git a/src/Examples/ReportsExample/Models/Report.cs b/src/Examples/ReportsExample/Models/Report.cs index 241221cdaa..5bc93edb49 100644 --- a/src/Examples/ReportsExample/Models/Report.cs +++ b/src/Examples/ReportsExample/Models/Report.cs @@ -1,15 +1,18 @@ using JsonApiDotNetCore.Models; -public class Report : Identifiable +namespace ReportsExample.Models { - [Attr] - public string Title { get; set; } + public class Report : Identifiable + { + [Attr] + public string Title { get; set; } - [Attr] - public ComplexType ComplexType { get; set; } -} + [Attr] + public ComplexType ComplexType { get; set; } + } -public class ComplexType -{ - public string CompoundPropertyName { get; set; } -} \ No newline at end of file + public class ComplexType + { + public string CompoundPropertyName { get; set; } + } +} diff --git a/src/Examples/ReportsExample/Services/ReportService.cs b/src/Examples/ReportsExample/Services/ReportService.cs index 9e5348a612..542b276a5b 100644 --- a/src/Examples/ReportsExample/Services/ReportService.cs +++ b/src/Examples/ReportsExample/Services/ReportService.cs @@ -2,36 +2,40 @@ using System.Threading.Tasks; using JsonApiDotNetCore.Services; using Microsoft.Extensions.Logging; +using ReportsExample.Models; -public class ReportService : IGetAllService +namespace ReportsExample.Services { - private ILogger _logger; - - public ReportService(ILoggerFactory loggerFactory) + public class ReportService : IGetAllService { - _logger = loggerFactory.CreateLogger(); - } + private ILogger _logger; - public Task> GetAsync() - { - _logger.LogError("GetAsync"); + public ReportService(ILoggerFactory loggerFactory) + { + _logger = loggerFactory.CreateLogger(); + } - var task = new Task>(() => Get()); + public Task> GetAsync() + { + _logger.LogError("GetAsync"); + + var task = new Task>(() => Get()); - task.RunSynchronously(TaskScheduler.Default); + task.RunSynchronously(TaskScheduler.Default); - return task; - } + return task; + } - private IEnumerable Get() - { - return new List { - new Report { - Title = "My Report", - ComplexType = new ComplexType { - CompoundPropertyName = "value" + private IEnumerable Get() + { + return new List { + new Report { + Title = "My Report", + ComplexType = new ComplexType { + CompoundPropertyName = "value" + } } - } - }; + }; + } } -} \ No newline at end of file +} diff --git a/src/JsonApiDotNetCore/Controllers/BaseJsonApiController.cs b/src/JsonApiDotNetCore/Controllers/BaseJsonApiController.cs index 551b781cc7..5b09836440 100644 --- a/src/JsonApiDotNetCore/Controllers/BaseJsonApiController.cs +++ b/src/JsonApiDotNetCore/Controllers/BaseJsonApiController.cs @@ -9,10 +9,9 @@ namespace JsonApiDotNetCore.Controllers { - public class BaseJsonApiController - : JsonApiControllerMixin - where T : class, IIdentifiable + public abstract class BaseJsonApiController : JsonApiControllerMixin where T : class, IIdentifiable { + private readonly IJsonApiOptions _jsonApiOptions; private readonly IGetAllService _getAll; private readonly IGetByIdService _getById; private readonly IGetRelationshipService _getRelationship; @@ -22,56 +21,27 @@ public class BaseJsonApiController private readonly IUpdateRelationshipService _updateRelationships; private readonly IDeleteService _delete; private readonly ILogger> _logger; - private readonly IJsonApiOptions _jsonApiOptions; - - public BaseJsonApiController( - IJsonApiOptions jsonApiOptions, - IResourceService resourceService, - ILoggerFactory loggerFactory) - { - if (loggerFactory != null) - _logger = loggerFactory.CreateLogger>(); - else - _logger = new Logger>(new LoggerFactory()); - _jsonApiOptions = jsonApiOptions; - _getAll = resourceService; - _getById = resourceService; - _getRelationship = resourceService; - _getRelationships = resourceService; - _create = resourceService; - _update = resourceService; - _updateRelationships = resourceService; - _delete = resourceService; - } + protected BaseJsonApiController( + IJsonApiOptions jsonApiOptions, + ILoggerFactory loggerFactory, + IResourceService resourceService) + : this(jsonApiOptions, loggerFactory, resourceService, resourceService, resourceService, resourceService, + resourceService, resourceService, resourceService, resourceService) + { } - public BaseJsonApiController( + protected BaseJsonApiController( IJsonApiOptions jsonApiOptions, + ILoggerFactory loggerFactory, IResourceQueryService queryService = null, IResourceCommandService commandService = null) - { - _jsonApiOptions = jsonApiOptions; - _getAll = queryService; - _getById = queryService; - _getRelationship = queryService; - _getRelationships = queryService; - _create = commandService; - _update = commandService; - _updateRelationships = commandService; - _delete = commandService; - } + : this(jsonApiOptions, loggerFactory, queryService, queryService, queryService, queryService, commandService, + commandService, commandService, commandService) + { } - /// - /// - /// - /// - /// - /// - /// - /// - /// - public BaseJsonApiController( + protected BaseJsonApiController( IJsonApiOptions jsonApiOptions, + ILoggerFactory loggerFactory, IGetAllService getAll = null, IGetByIdService getById = null, IGetRelationshipService getRelationship = null, @@ -82,6 +52,7 @@ public BaseJsonApiController( IDeleteService delete = null) { _jsonApiOptions = jsonApiOptions; + _logger = loggerFactory.CreateLogger>(); _getAll = getAll; _getById = getById; _getRelationship = getRelationship; @@ -90,6 +61,8 @@ public BaseJsonApiController( _update = update; _updateRelationships = updateRelationships; _delete = delete; + + _logger.LogTrace("Executing constructor."); } public virtual async Task GetAsync() @@ -193,24 +166,26 @@ public virtual async Task DeleteAsync(TId id) } } - public class BaseJsonApiController - : BaseJsonApiController - where T : class, IIdentifiable + public abstract class BaseJsonApiController : BaseJsonApiController where T : class, IIdentifiable { - public BaseJsonApiController( + protected BaseJsonApiController( IJsonApiOptions jsonApiOptions, - IResourceService resourceService - ) : base(jsonApiOptions, resourceService, resourceService) { } + ILoggerFactory loggerFactory, + IResourceService resourceService) + : base(jsonApiOptions, loggerFactory, resourceService, resourceService) + { } - public BaseJsonApiController( + protected BaseJsonApiController( IJsonApiOptions jsonApiOptions, + ILoggerFactory loggerFactory, IResourceQueryService queryService = null, - IResourceCommandService commandService = null - ) : base(jsonApiOptions, queryService, commandService) { } - + IResourceCommandService commandService = null) + : base(jsonApiOptions, loggerFactory, queryService, commandService) + { } - public BaseJsonApiController( + protected BaseJsonApiController( IJsonApiOptions jsonApiOptions, + ILoggerFactory loggerFactory, IGetAllService getAll = null, IGetByIdService getById = null, IGetRelationshipService getRelationship = null, @@ -218,7 +193,9 @@ public BaseJsonApiController( ICreateService create = null, IUpdateService update = null, IUpdateRelationshipService updateRelationships = null, - IDeleteService delete = null - ) : base(jsonApiOptions, getAll, getById, getRelationship, getRelationships, create, update, updateRelationships, delete) { } + IDeleteService delete = null) + : base(jsonApiOptions, loggerFactory, getAll, getById, getRelationship, getRelationships, create, update, + updateRelationships, delete) + { } } } diff --git a/src/JsonApiDotNetCore/Controllers/JsonApiCommandController.cs b/src/JsonApiDotNetCore/Controllers/JsonApiCommandController.cs index b6705b4c49..088dc31acc 100644 --- a/src/JsonApiDotNetCore/Controllers/JsonApiCommandController.cs +++ b/src/JsonApiDotNetCore/Controllers/JsonApiCommandController.cs @@ -3,26 +3,27 @@ using JsonApiDotNetCore.Models; using JsonApiDotNetCore.Services; using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.Logging; namespace JsonApiDotNetCore.Controllers { - public class JsonApiCommandController : JsonApiCommandController - where T : class, IIdentifiable + public class JsonApiCommandController : JsonApiCommandController where T : class, IIdentifiable { public JsonApiCommandController( IJsonApiOptions jsonApiOptions, - IResourceService resourceService) - : base(jsonApiOptions, resourceService) + ILoggerFactory loggerFactory, + IResourceCommandService commandService) + : base(jsonApiOptions, loggerFactory, commandService) { } } - public class JsonApiCommandController - : BaseJsonApiController where T : class, IIdentifiable + public class JsonApiCommandController : BaseJsonApiController where T : class, IIdentifiable { public JsonApiCommandController( IJsonApiOptions jsonApiOptions, - IResourceService resourceService) - : base(jsonApiOptions, resourceService) + ILoggerFactory loggerFactory, + IResourceCommandService commandService) + : base(jsonApiOptions, loggerFactory, null, commandService) { } [HttpPost] diff --git a/src/JsonApiDotNetCore/Controllers/JsonApiController.cs b/src/JsonApiDotNetCore/Controllers/JsonApiController.cs index ed40928d1d..73877ca996 100644 --- a/src/JsonApiDotNetCore/Controllers/JsonApiController.cs +++ b/src/JsonApiDotNetCore/Controllers/JsonApiController.cs @@ -9,18 +9,16 @@ namespace JsonApiDotNetCore.Controllers { public class JsonApiController : BaseJsonApiController where T : class, IIdentifiable { - /// - /// - /// public JsonApiController( IJsonApiOptions jsonApiOptions, - IResourceService resourceService, - ILoggerFactory loggerFactory = null) - : base(jsonApiOptions, resourceService, loggerFactory = null) + ILoggerFactory loggerFactory, + IResourceService resourceService) + : base(jsonApiOptions, loggerFactory, resourceService) { } public JsonApiController( IJsonApiOptions jsonApiOptions, + ILoggerFactory loggerFactory, IGetAllService getAll = null, IGetByIdService getById = null, IGetRelationshipService getRelationship = null, @@ -28,8 +26,10 @@ public JsonApiController( ICreateService create = null, IUpdateService update = null, IUpdateRelationshipService updateRelationships = null, - IDeleteService delete = null - ) : base(jsonApiOptions, getAll, getById, getRelationship, getRelationships, create, update, updateRelationships, delete) { } + IDeleteService delete = null) + : base(jsonApiOptions, loggerFactory, getAll, getById, getRelationship, getRelationships, create, update, + updateRelationships, delete) + { } [HttpGet] public override async Task GetAsync() => await base.GetAsync(); @@ -64,28 +64,18 @@ public override async Task PatchRelationshipsAsync( public override async Task DeleteAsync(TId id) => await base.DeleteAsync(id); } - /// - /// JsonApiController with int as default - /// - /// public class JsonApiController : JsonApiController where T : class, IIdentifiable { - /// - /// Base constructor with int as default - /// - /// - /// - /// public JsonApiController( IJsonApiOptions jsonApiOptions, - IResourceService resourceService, - ILoggerFactory loggerFactory = null - ) - : base(jsonApiOptions, resourceService, loggerFactory) + ILoggerFactory loggerFactory, + IResourceService resourceService) + : base(jsonApiOptions, loggerFactory, resourceService) { } public JsonApiController( IJsonApiOptions jsonApiOptions, + ILoggerFactory loggerFactory, IGetAllService getAll = null, IGetByIdService getById = null, IGetRelationshipService getRelationship = null, @@ -93,9 +83,9 @@ public JsonApiController( ICreateService create = null, IUpdateService update = null, IUpdateRelationshipService updateRelationships = null, - IDeleteService delete = null - ) : base(jsonApiOptions, getAll, getById, getRelationship, getRelationships, create, update, updateRelationships, delete) { } - - + IDeleteService delete = null) + : base(jsonApiOptions, loggerFactory, getAll, getById, getRelationship, getRelationships, create, update, + updateRelationships, delete) + { } } } diff --git a/src/JsonApiDotNetCore/Controllers/JsonApiQueryController.cs b/src/JsonApiDotNetCore/Controllers/JsonApiQueryController.cs index 1d49b984ea..d312026804 100644 --- a/src/JsonApiDotNetCore/Controllers/JsonApiQueryController.cs +++ b/src/JsonApiDotNetCore/Controllers/JsonApiQueryController.cs @@ -3,31 +3,28 @@ using JsonApiDotNetCore.Models; using JsonApiDotNetCore.Services; using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.Logging; namespace JsonApiDotNetCore.Controllers { - public class JsonApiQueryController - : JsonApiQueryController where T : class, IIdentifiable + public class JsonApiQueryController : JsonApiQueryController where T : class, IIdentifiable { public JsonApiQueryController( IJsonApiOptions jsonApiOptions, - IResourceService resourceService) - : base(jsonApiOptions, resourceService) { } + ILoggerFactory loggerFactory, + IResourceQueryService queryService) + : base(jsonApiOptions, loggerFactory, queryService) + { } } - public class JsonApiQueryController - : BaseJsonApiController where T : class, IIdentifiable + public class JsonApiQueryController : BaseJsonApiController where T : class, IIdentifiable { public JsonApiQueryController( IJsonApiOptions jsonApiContext, - IResourceQueryService resourceQueryService) - : base(jsonApiContext, resourceQueryService) { } - - - public JsonApiQueryController( - IJsonApiOptions jsonApiOptions, - IResourceService resourceService) - : base(jsonApiOptions, resourceService) { } + ILoggerFactory loggerFactory, + IResourceQueryService queryService) + : base(jsonApiContext, loggerFactory, queryService) + { } [HttpGet] public override async Task GetAsync() => await base.GetAsync(); diff --git a/src/JsonApiDotNetCore/Data/DefaultResourceRepository.cs b/src/JsonApiDotNetCore/Data/DefaultResourceRepository.cs index 56814db547..f03e3e4f24 100644 --- a/src/JsonApiDotNetCore/Data/DefaultResourceRepository.cs +++ b/src/JsonApiDotNetCore/Data/DefaultResourceRepository.cs @@ -27,27 +27,23 @@ public class DefaultResourceRepository : IResourceRepository _dbSet; private readonly IResourceGraph _resourceGraph; private readonly IGenericServiceFactory _genericServiceFactory; - - public DefaultResourceRepository( - ITargetedFields targetedFields, - IDbContextResolver contextResolver, - IResourceGraph resourceGraph, - IGenericServiceFactory genericServiceFactory) - : this(targetedFields, contextResolver, resourceGraph, genericServiceFactory, null) - { } + private ILogger> _logger; public DefaultResourceRepository( ITargetedFields targetedFields, IDbContextResolver contextResolver, IResourceGraph resourceGraph, IGenericServiceFactory genericServiceFactory, - ILoggerFactory loggerFactory = null) + ILoggerFactory loggerFactory) { _targetedFields = targetedFields; _resourceGraph = resourceGraph; _genericServiceFactory = genericServiceFactory; _context = contextResolver.GetContext(); _dbSet = _context.Set(); + _logger = loggerFactory.CreateLogger>(); + + _logger.LogTrace("Executing constructor."); } /// @@ -415,17 +411,13 @@ private IIdentifiable AttachOrGetTracked(IIdentifiable relationshipValue) public class DefaultResourceRepository : DefaultResourceRepository, IResourceRepository where TResource : class, IIdentifiable { - public DefaultResourceRepository(ITargetedFields targetedFields, - IDbContextResolver contextResolver, - IResourceGraph resourceGraph, - IGenericServiceFactory genericServiceFactory) - : base(targetedFields, contextResolver, resourceGraph, genericServiceFactory) { } - - public DefaultResourceRepository(ITargetedFields targetedFields, - IDbContextResolver contextResolver, - IResourceGraph resourceGraph, - IGenericServiceFactory genericServiceFactory, - ILoggerFactory loggerFactory = null) - : base(targetedFields, contextResolver, resourceGraph, genericServiceFactory, loggerFactory) { } + public DefaultResourceRepository( + ITargetedFields targetedFields, + IDbContextResolver contextResolver, + IResourceGraph resourceGraph, + IGenericServiceFactory genericServiceFactory, + ILoggerFactory loggerFactory) + : base(targetedFields, contextResolver, resourceGraph, genericServiceFactory, loggerFactory) + { } } } diff --git a/src/JsonApiDotNetCore/Formatters/JsonApiReader.cs b/src/JsonApiDotNetCore/Formatters/JsonApiReader.cs index 0bc1e79440..784f16fd0b 100644 --- a/src/JsonApiDotNetCore/Formatters/JsonApiReader.cs +++ b/src/JsonApiDotNetCore/Formatters/JsonApiReader.cs @@ -21,6 +21,8 @@ public JsonApiReader(IJsonApiDeserializer deserializer, { _deserializer = deserializer; _logger = loggerFactory.CreateLogger(); + + _logger.LogTrace("Executing constructor."); } public async Task ReadAsync(InputFormatterContext context) @@ -40,7 +42,7 @@ public async Task ReadAsync(InputFormatterContext context object model = _deserializer.Deserialize(body); if (model == null) { - _logger?.LogError("An error occurred while de-serializing the payload"); + _logger.LogError("An error occurred while de-serializing the payload"); } if (context.HttpContext.Request.Method == "PATCH") { @@ -55,7 +57,7 @@ public async Task ReadAsync(InputFormatterContext context } if (idMissing) { - _logger?.LogError("Payload must include id attribute"); + _logger.LogError("Payload must include id attribute"); throw new JsonApiException(400, "Payload must include id attribute"); } } @@ -63,7 +65,7 @@ public async Task ReadAsync(InputFormatterContext context } catch (Exception ex) { - _logger?.LogError(new EventId(), ex, "An error occurred while de-serializing the payload"); + _logger.LogError(new EventId(), ex, "An error occurred while de-serializing the payload"); context.ModelState.AddModelError(context.ModelName, ex, context.Metadata); return await InputFormatterResult.FailureAsync(); } diff --git a/src/JsonApiDotNetCore/Formatters/JsonApiWriter.cs b/src/JsonApiDotNetCore/Formatters/JsonApiWriter.cs index d264f94365..0b2c615581 100644 --- a/src/JsonApiDotNetCore/Formatters/JsonApiWriter.cs +++ b/src/JsonApiDotNetCore/Formatters/JsonApiWriter.cs @@ -25,6 +25,8 @@ public JsonApiWriter(IJsonApiSerializer serializer, { _serializer = serializer; _logger = loggerFactory.CreateLogger(); + + _logger.LogTrace("Executing constructor."); } public async Task WriteAsync(OutputFormatterWriteContext context) @@ -57,7 +59,7 @@ public async Task WriteAsync(OutputFormatterWriteContext context) } catch (Exception e) { - _logger?.LogError(new EventId(), e, "An error occurred while formatting the response"); + _logger.LogError(new EventId(), e, "An error occurred while formatting the response"); var errors = new ErrorCollection(); errors.Add(new Error(500, e.Message, ErrorMeta.FromException(e))); responseContent = _serializer.Serialize(errors); diff --git a/src/JsonApiDotNetCore/Middleware/DefaultExceptionFilter.cs b/src/JsonApiDotNetCore/Middleware/DefaultExceptionFilter.cs index b6c82b27e3..195e38a9e4 100644 --- a/src/JsonApiDotNetCore/Middleware/DefaultExceptionFilter.cs +++ b/src/JsonApiDotNetCore/Middleware/DefaultExceptionFilter.cs @@ -1,4 +1,4 @@ -using JsonApiDotNetCore.Internal; +using JsonApiDotNetCore.Internal; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Filters; using Microsoft.Extensions.Logging; @@ -19,7 +19,7 @@ public DefaultExceptionFilter(ILoggerFactory loggerFactory) public void OnException(ExceptionContext context) { - _logger?.LogError(new EventId(), context.Exception, "An unhandled exception occurred during the request"); + _logger.LogError(new EventId(), context.Exception, "An unhandled exception occurred during the request"); var jsonApiException = JsonApiExceptionFactory.GetException(context.Exception); diff --git a/src/JsonApiDotNetCore/Services/DefaultResourceService.cs b/src/JsonApiDotNetCore/Services/DefaultResourceService.cs index 95eeb00e72..d7eaed4001 100644 --- a/src/JsonApiDotNetCore/Services/DefaultResourceService.cs +++ b/src/JsonApiDotNetCore/Services/DefaultResourceService.cs @@ -35,12 +35,12 @@ public class DefaultResourceService : private readonly ResourceContext _currentRequestResource; public DefaultResourceService( - IEnumerable queryParameters, - IJsonApiOptions options, - IResourceRepository repository, - IResourceContextProvider provider, - IResourceHookExecutor hookExecutor = null, - ILoggerFactory loggerFactory = null) + IEnumerable queryParameters, + IJsonApiOptions options, + ILoggerFactory loggerFactory, + IResourceRepository repository, + IResourceContextProvider provider, + IResourceHookExecutor hookExecutor = null) { _includeService = queryParameters.FirstOrDefault(); _sparseFieldsService = queryParameters.FirstOrDefault(); @@ -48,12 +48,13 @@ public DefaultResourceService( _sortService = queryParameters.FirstOrDefault(); _filterService = queryParameters.FirstOrDefault(); _options = options; + _logger = loggerFactory.CreateLogger>(); _repository = repository; _hookExecutor = hookExecutor; - _logger = loggerFactory?.CreateLogger>(); _currentRequestResource = provider.GetResourceContext(); - } + _logger.LogTrace("Executing constructor."); + } public virtual async Task CreateAsync(TResource entity) { @@ -211,11 +212,9 @@ protected virtual async Task> ApplyPageQueryAsync(IQuerya { pageOffset = -pageOffset; } - if (_logger?.IsEnabled(LogLevel.Information) == true) - { - _logger?.LogInformation($"Applying paging query. Fetching page {pageOffset} " + - $"with {_pageService.CurrentPageSize} entities"); - } + + _logger.LogInformation($"Applying paging query. Fetching page {pageOffset} " + + $"with {_pageService.CurrentPageSize} entities"); return await _repository.PageAsync(entities, _pageService.CurrentPageSize, pageOffset); } @@ -355,12 +354,14 @@ public class DefaultResourceService : DefaultResourceService where TResource : class, IIdentifiable { - public DefaultResourceService(IEnumerable queryParameters, - IJsonApiOptions options, - IResourceRepository repository, - IResourceContextProvider provider, - IResourceHookExecutor hookExecutor = null, - ILoggerFactory loggerFactory = null) - : base(queryParameters, options, repository, provider, hookExecutor, loggerFactory) { } + public DefaultResourceService( + IEnumerable queryParameters, + IJsonApiOptions options, + ILoggerFactory loggerFactory, + IResourceRepository repository, + IResourceContextProvider provider, + IResourceHookExecutor hookExecutor = null) + : base(queryParameters, options, loggerFactory, repository, provider, hookExecutor) + { } } } diff --git a/test/DiscoveryTests/ServiceDiscoveryFacadeTests.cs b/test/DiscoveryTests/ServiceDiscoveryFacadeTests.cs index cf87a3f537..c4a7ba4644 100644 --- a/test/DiscoveryTests/ServiceDiscoveryFacadeTests.cs +++ b/test/DiscoveryTests/ServiceDiscoveryFacadeTests.cs @@ -34,6 +34,7 @@ public ServiceDiscoveryFacadeTests() dbResolverMock.Setup(m => m.GetContext()).Returns(new Mock().Object); TestModelRepository._dbContextResolver = dbResolverMock.Object; _services.AddSingleton(new JsonApiOptions()); + _services.AddSingleton(new LoggerFactory()); _services.AddScoped((_) => new Mock().Object); _services.AddScoped((_) => new Mock().Object); _services.AddScoped((_) => new Mock().Object); @@ -102,23 +103,28 @@ public class TestModelService : DefaultResourceService { private static IResourceRepository _repo = new Mock>().Object; - public TestModelService(IEnumerable queryParameters, - IJsonApiOptions options, - IResourceRepository repository, - IResourceContextProvider provider, - IResourceHookExecutor hookExecutor = null, - ILoggerFactory loggerFactory = null) - : base(queryParameters, options, repository, provider, hookExecutor, loggerFactory) { } + public TestModelService( + IEnumerable queryParameters, + IJsonApiOptions options, + ILoggerFactory loggerFactory, + IResourceRepository repository, + IResourceContextProvider provider, + IResourceHookExecutor hookExecutor = null) + : base(queryParameters, options, loggerFactory, repository, provider, hookExecutor) + { } } public class TestModelRepository : DefaultResourceRepository { internal static IDbContextResolver _dbContextResolver; - public TestModelRepository(ITargetedFields targetedFields, - IResourceGraph resourceGraph, - IGenericServiceFactory genericServiceFactory) - : base(targetedFields, _dbContextResolver, resourceGraph, genericServiceFactory) { } + public TestModelRepository( + ITargetedFields targetedFields, + IResourceGraph resourceGraph, + IGenericServiceFactory genericServiceFactory, + ILoggerFactory loggerFactory) + : base(targetedFields, _dbContextResolver, resourceGraph, genericServiceFactory, loggerFactory) + { } } } } diff --git a/test/IntegrationTests/Data/EntityRepositoryTests.cs b/test/IntegrationTests/Data/EntityRepositoryTests.cs index 8e45c13c30..35dbbe878c 100644 --- a/test/IntegrationTests/Data/EntityRepositoryTests.cs +++ b/test/IntegrationTests/Data/EntityRepositoryTests.cs @@ -1,5 +1,5 @@ -using JsonApiDotNetCore.Builders; -using JsonApiDotNetCore.Data; +using JsonApiDotNetCore.Builders; +using JsonApiDotNetCore.Data; using JsonApiDotNetCore.Models; using JsonApiDotNetCore.Serialization; using JsonApiDotNetCoreExample.Data; @@ -10,6 +10,7 @@ using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; +using Microsoft.Extensions.Logging.Abstractions; using Xunit; namespace JADNC.IntegrationTests.Data @@ -154,7 +155,7 @@ public async Task Paging_PageNumberIsNegative_GiveBackReverseAmountOfIds(int pag contextResolverMock.Setup(m => m.GetContext()).Returns(context); var resourceGraph = new ResourceGraphBuilder().AddResource().Build(); var targetedFields = new Mock(); - var repository = new DefaultResourceRepository(targetedFields.Object, contextResolverMock.Object, resourceGraph, null); + var repository = new DefaultResourceRepository(targetedFields.Object, contextResolverMock.Object, resourceGraph, null, NullLoggerFactory.Instance); return (repository, targetedFields); } diff --git a/test/UnitTests/Controllers/BaseJsonApiController_Tests.cs b/test/UnitTests/Controllers/BaseJsonApiController_Tests.cs index fb13bb803c..2044ca72dd 100644 --- a/test/UnitTests/Controllers/BaseJsonApiController_Tests.cs +++ b/test/UnitTests/Controllers/BaseJsonApiController_Tests.cs @@ -8,7 +8,8 @@ using JsonApiDotNetCore.Internal; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; - +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Logging.Abstractions; namespace UnitTests { @@ -19,27 +20,50 @@ public class Resource : Identifiable [Attr] public string TestAttribute { get; set; } } + public class ResourceController : BaseJsonApiController + { + public ResourceController( + IJsonApiOptions jsonApiOptions, + ILoggerFactory loggerFactory, + IResourceService resourceService) + : base(jsonApiOptions, loggerFactory, resourceService) + { } + + public ResourceController( + IJsonApiOptions jsonApiOptions, + ILoggerFactory loggerFactory, + IGetAllService getAll = null, + IGetByIdService getById = null, + IGetRelationshipService getRelationship = null, + IGetRelationshipsService getRelationships = null, + ICreateService create = null, + IUpdateService update = null, + IUpdateRelationshipService updateRelationships = null, + IDeleteService delete = null) + : base(jsonApiOptions, loggerFactory, getAll, getById, getRelationship, getRelationships, create, + update, updateRelationships, delete) + { } + } + [Fact] public async Task GetAsync_Calls_Service() { // Arrange var serviceMock = new Mock>(); - var controller = new BaseJsonApiController(new Mock().Object, getAll: serviceMock.Object); + var controller = new ResourceController(new Mock().Object, NullLoggerFactory.Instance, getAll: serviceMock.Object); // Act await controller.GetAsync(); // Assert serviceMock.Verify(m => m.GetAsync(), Times.Once); - } [Fact] public async Task GetAsync_Throws_405_If_No_Service() { // Arrange - var serviceMock = new Mock>(); - var controller = new BaseJsonApiController(new Mock().Object, null); + var controller = new ResourceController(new Mock().Object, NullLoggerFactory.Instance, null); // Act var exception = await Assert.ThrowsAsync(() => controller.GetAsync()); @@ -54,14 +78,13 @@ public async Task GetAsyncById_Calls_Service() // Arrange const int id = 0; var serviceMock = new Mock>(); - var controller = new BaseJsonApiController(new Mock().Object, getById: serviceMock.Object); + var controller = new ResourceController(new Mock().Object, NullLoggerFactory.Instance, getById: serviceMock.Object); // Act await controller.GetAsync(id); // Assert serviceMock.Verify(m => m.GetAsync(id), Times.Once); - } [Fact] @@ -69,8 +92,7 @@ public async Task GetAsyncById_Throws_405_If_No_Service() { // Arrange const int id = 0; - var serviceMock = new Mock>(); - var controller = new BaseJsonApiController(new Mock().Object, getById: null); + var controller = new ResourceController(new Mock().Object, NullLoggerFactory.Instance, getById: null); // Act var exception = await Assert.ThrowsAsync(() => controller.GetAsync(id)); @@ -85,7 +107,7 @@ public async Task GetRelationshipsAsync_Calls_Service() // Arrange const int id = 0; var serviceMock = new Mock>(); - var controller = new BaseJsonApiController(new Mock().Object, getRelationships: serviceMock.Object); + var controller = new ResourceController(new Mock().Object, NullLoggerFactory.Instance, getRelationships: serviceMock.Object); // Act await controller.GetRelationshipsAsync(id, string.Empty); @@ -99,8 +121,7 @@ public async Task GetRelationshipsAsync_Throws_405_If_No_Service() { // Arrange const int id = 0; - var serviceMock = new Mock>(); - var controller = new BaseJsonApiController(new Mock().Object, getRelationships: null); + var controller = new ResourceController(new Mock().Object, NullLoggerFactory.Instance, getRelationships: null); // Act var exception = await Assert.ThrowsAsync(() => controller.GetRelationshipsAsync(id, string.Empty)); @@ -115,7 +136,7 @@ public async Task GetRelationshipAsync_Calls_Service() // Arrange const int id = 0; var serviceMock = new Mock>(); - var controller = new BaseJsonApiController(new Mock().Object, getRelationship: serviceMock.Object); + var controller = new ResourceController(new Mock().Object, NullLoggerFactory.Instance, getRelationship: serviceMock.Object); // Act await controller.GetRelationshipAsync(id, string.Empty); @@ -129,8 +150,7 @@ public async Task GetRelationshipAsync_Throws_405_If_No_Service() { // Arrange const int id = 0; - var serviceMock = new Mock>(); - var controller = new BaseJsonApiController(new Mock().Object, getRelationship: null); + var controller = new ResourceController(new Mock().Object, NullLoggerFactory.Instance, getRelationship: null); // Act var exception = await Assert.ThrowsAsync(() => controller.GetRelationshipAsync(id, string.Empty)); @@ -147,7 +167,7 @@ public async Task PatchAsync_Calls_Service() var resource = new Resource(); var serviceMock = new Mock>(); - var controller = new BaseJsonApiController(new JsonApiOptions(), update: serviceMock.Object); + var controller = new ResourceController(new JsonApiOptions(), NullLoggerFactory.Instance, update: serviceMock.Object); // Act await controller.PatchAsync(id, resource); @@ -163,7 +183,7 @@ public async Task PatchAsync_ModelStateInvalid_ValidateModelStateDisabled() const int id = 0; var resource = new Resource(); var serviceMock = new Mock>(); - var controller = new BaseJsonApiController(new JsonApiOptions(), update: serviceMock.Object); + var controller = new ResourceController(new JsonApiOptions(), NullLoggerFactory.Instance, update: serviceMock.Object); // Act var response = await controller.PatchAsync(id, resource); @@ -181,7 +201,7 @@ public async Task PatchAsync_ModelStateInvalid_ValidateModelStateEnabled() var resource = new Resource(); var serviceMock = new Mock>(); - var controller = new BaseJsonApiController(new JsonApiOptions { ValidateModelState = true }, update: serviceMock.Object); + var controller = new ResourceController(new JsonApiOptions { ValidateModelState = true }, NullLoggerFactory.Instance, update: serviceMock.Object); controller.ModelState.AddModelError("TestAttribute", "Failed Validation"); // Act @@ -198,8 +218,7 @@ public async Task PatchAsync_Throws_405_If_No_Service() { // Arrange const int id = 0; - var serviceMock = new Mock>(); - var controller = new BaseJsonApiController(new Mock().Object, update: null); + var controller = new ResourceController(new Mock().Object, NullLoggerFactory.Instance, update: null); // Act var exception = await Assert.ThrowsAsync(() => controller.PatchAsync(id, It.IsAny())); @@ -215,7 +234,7 @@ public async Task PostAsync_Calls_Service() var resource = new Resource(); var serviceMock = new Mock>(); - var controller = new BaseJsonApiController(new JsonApiOptions(), create: serviceMock.Object); + var controller = new ResourceController(new JsonApiOptions(), NullLoggerFactory.Instance, create: serviceMock.Object); serviceMock.Setup(m => m.CreateAsync(It.IsAny())).ReturnsAsync(resource); controller.ControllerContext = new Microsoft.AspNetCore.Mvc.ControllerContext { HttpContext = new DefaultHttpContext() }; @@ -232,11 +251,10 @@ public async Task PostAsync_ModelStateInvalid_ValidateModelStateDisabled() // Arrange var resource = new Resource(); var serviceMock = new Mock>(); - var controller = new BaseJsonApiController(new JsonApiOptions { ValidateModelState = false }, create: serviceMock.Object); + var controller = new ResourceController(new JsonApiOptions { ValidateModelState = false }, NullLoggerFactory.Instance, create: serviceMock.Object); controller.ControllerContext = new Microsoft.AspNetCore.Mvc.ControllerContext { HttpContext = new DefaultHttpContext() }; serviceMock.Setup(m => m.CreateAsync(It.IsAny())).ReturnsAsync(resource); - // Act var response = await controller.PostAsync(resource); @@ -251,12 +269,11 @@ public async Task PostAsync_ModelStateInvalid_ValidateModelStateEnabled() // Arrange var resource = new Resource(); var serviceMock = new Mock>(); - var controller = new BaseJsonApiController(new JsonApiOptions { ValidateModelState = true }, create: serviceMock.Object); + var controller = new ResourceController(new JsonApiOptions { ValidateModelState = true }, NullLoggerFactory.Instance, create: serviceMock.Object); controller.ControllerContext = new ControllerContext { HttpContext = new DefaultHttpContext() }; controller.ModelState.AddModelError("TestAttribute", "Failed Validation"); serviceMock.Setup(m => m.CreateAsync(It.IsAny())).ReturnsAsync(resource); - // Act var response = await controller.PostAsync(resource); @@ -271,9 +288,8 @@ public async Task PatchRelationshipsAsync_Calls_Service() { // Arrange const int id = 0; - var resource = new Resource(); var serviceMock = new Mock>(); - var controller = new BaseJsonApiController(new Mock().Object, updateRelationships: serviceMock.Object); + var controller = new ResourceController(new Mock().Object, NullLoggerFactory.Instance, updateRelationships: serviceMock.Object); // Act await controller.PatchRelationshipsAsync(id, string.Empty, null); @@ -287,8 +303,7 @@ public async Task PatchRelationshipsAsync_Throws_405_If_No_Service() { // Arrange const int id = 0; - var serviceMock = new Mock>(); - var controller = new BaseJsonApiController(new Mock().Object, updateRelationships: null); + var controller = new ResourceController(new Mock().Object, NullLoggerFactory.Instance, updateRelationships: null); // Act var exception = await Assert.ThrowsAsync(() => controller.PatchRelationshipsAsync(id, string.Empty, null)); @@ -302,9 +317,8 @@ public async Task DeleteAsync_Calls_Service() { // Arrange const int id = 0; - var resource = new Resource(); var serviceMock = new Mock>(); - var controller = new BaseJsonApiController(new Mock().Object, delete: serviceMock.Object); + var controller = new ResourceController(new Mock().Object, NullLoggerFactory.Instance, delete: serviceMock.Object); // Act await controller.DeleteAsync(id); @@ -318,9 +332,7 @@ public async Task DeleteAsync_Throws_405_If_No_Service() { // Arrange const int id = 0; - var serviceMock = new Mock>(); - var controller = new BaseJsonApiController(new Mock().Object, - + var controller = new ResourceController(new Mock().Object, NullLoggerFactory.Instance, delete: null); // Act @@ -329,7 +341,5 @@ public async Task DeleteAsync_Throws_405_If_No_Service() // Assert Assert.Equal(405, exception.GetStatusCode()); } - - } } diff --git a/test/UnitTests/Data/DefaultEntityRepositoryTest.cs b/test/UnitTests/Data/DefaultEntityRepositoryTest.cs index 1428ab3376..3c9fca2951 100644 --- a/test/UnitTests/Data/DefaultEntityRepositoryTest.cs +++ b/test/UnitTests/Data/DefaultEntityRepositoryTest.cs @@ -11,6 +11,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; +using Microsoft.Extensions.Logging.Abstractions; using Xunit; namespace UnitTests.Data @@ -66,7 +67,7 @@ private DefaultResourceRepository Setup() contextResolverMock.Setup(m => m.GetContext()).Returns(new Mock().Object); var resourceGraph = new Mock(); var targetedFields = new Mock(); - var repository = new DefaultResourceRepository(targetedFields.Object, contextResolverMock.Object, resourceGraph.Object, null); + var repository = new DefaultResourceRepository(targetedFields.Object, contextResolverMock.Object, resourceGraph.Object, null, NullLoggerFactory.Instance); return repository; } diff --git a/test/UnitTests/ResourceHooks/ResourceHooksTestsSetup.cs b/test/UnitTests/ResourceHooks/ResourceHooksTestsSetup.cs index 8fa2473c5b..28f35f2c83 100644 --- a/test/UnitTests/ResourceHooks/ResourceHooksTestsSetup.cs +++ b/test/UnitTests/ResourceHooks/ResourceHooksTestsSetup.cs @@ -18,6 +18,7 @@ using JsonApiDotNetCore.Serialization; using JsonApiDotNetCore.Internal.Query; using JsonApiDotNetCore.Query; +using Microsoft.Extensions.Logging.Abstractions; namespace UnitTests.ResourceHooks { @@ -344,7 +345,7 @@ AppDbContext dbContext ) where TModel : class, IIdentifiable { IDbContextResolver resolver = CreateTestDbResolver(dbContext); - return new DefaultResourceRepository(null, resolver, null, null, null); + return new DefaultResourceRepository(null, resolver, null, null, NullLoggerFactory.Instance); } IDbContextResolver CreateTestDbResolver(AppDbContext dbContext) where TModel : class, IIdentifiable diff --git a/test/UnitTests/Services/EntityResourceService_Tests.cs b/test/UnitTests/Services/EntityResourceService_Tests.cs index e3bf3128eb..f0a99df980 100644 --- a/test/UnitTests/Services/EntityResourceService_Tests.cs +++ b/test/UnitTests/Services/EntityResourceService_Tests.cs @@ -10,6 +10,7 @@ using JsonApiDotNetCore.Query; using JsonApiDotNetCore.Services; using JsonApiDotNetCoreExample.Models; +using Microsoft.Extensions.Logging.Abstractions; using Moq; using Xunit; @@ -119,7 +120,7 @@ private DefaultResourceService GetService() _sortService.Object, _sparseFieldsService.Object }; - return new DefaultResourceService(queryParamServices, new JsonApiOptions(), _repositoryMock.Object, _resourceGraph); + return new DefaultResourceService(queryParamServices, new JsonApiOptions(), NullLoggerFactory.Instance, _repositoryMock.Object, _resourceGraph); } } }