mirror of
https://github.com/zoriya/Kyoo.git
synced 2025-05-24 02:02:36 -04:00
Fixing circular dependencies
This commit is contained in:
parent
59e72b6dca
commit
c47a4b2e15
@ -7,6 +7,7 @@ using System.Threading.Tasks;
|
|||||||
using Kyoo.Models;
|
using Kyoo.Models;
|
||||||
using Kyoo.Models.Exceptions;
|
using Kyoo.Models.Exceptions;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
|
|
||||||
namespace Kyoo.Controllers
|
namespace Kyoo.Controllers
|
||||||
{
|
{
|
||||||
@ -14,20 +15,20 @@ namespace Kyoo.Controllers
|
|||||||
{
|
{
|
||||||
private readonly DatabaseContext _database;
|
private readonly DatabaseContext _database;
|
||||||
private readonly IProviderRepository _providers;
|
private readonly IProviderRepository _providers;
|
||||||
private readonly IEpisodeRepository _episodes;
|
private readonly Lazy<IEpisodeRepository> _episodes;
|
||||||
private readonly IShowRepository _shows;
|
private readonly IShowRepository _shows;
|
||||||
protected override Expression<Func<Season, object>> DefaultSort => x => x.SeasonNumber;
|
protected override Expression<Func<Season, object>> DefaultSort => x => x.SeasonNumber;
|
||||||
|
|
||||||
|
|
||||||
public SeasonRepository(DatabaseContext database,
|
public SeasonRepository(DatabaseContext database,
|
||||||
IProviderRepository providers,
|
IProviderRepository providers,
|
||||||
IEpisodeRepository episodes,
|
IShowRepository shows,
|
||||||
IShowRepository shows)
|
IServiceProvider services)
|
||||||
: base(database)
|
: base(database)
|
||||||
{
|
{
|
||||||
_database = database;
|
_database = database;
|
||||||
_providers = providers;
|
_providers = providers;
|
||||||
_episodes = episodes;
|
_episodes = new Lazy<IEpisodeRepository>(services.GetRequiredService<IEpisodeRepository>);
|
||||||
_shows = shows;
|
_shows = shows;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -36,14 +37,16 @@ namespace Kyoo.Controllers
|
|||||||
{
|
{
|
||||||
_database.Dispose();
|
_database.Dispose();
|
||||||
_providers.Dispose();
|
_providers.Dispose();
|
||||||
_episodes.Dispose();
|
if (_episodes.IsValueCreated)
|
||||||
|
_episodes.Value.Dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
public override async ValueTask DisposeAsync()
|
public override async ValueTask DisposeAsync()
|
||||||
{
|
{
|
||||||
await _database.DisposeAsync();
|
await _database.DisposeAsync();
|
||||||
await _providers.DisposeAsync();
|
await _providers.DisposeAsync();
|
||||||
await _episodes.DisposeAsync();
|
if (_episodes.IsValueCreated)
|
||||||
|
await _episodes.Value.DisposeAsync();
|
||||||
}
|
}
|
||||||
|
|
||||||
public override Task<Season> Get(string slug)
|
public override Task<Season> Get(string slug)
|
||||||
@ -161,7 +164,7 @@ namespace Kyoo.Controllers
|
|||||||
await _database.SaveChangesAsync();
|
await _database.SaveChangesAsync();
|
||||||
|
|
||||||
if (obj.Episodes != null)
|
if (obj.Episodes != null)
|
||||||
await _episodes.DeleteRange(obj.Episodes);
|
await _episodes.Value.DeleteRange(obj.Episodes);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -6,6 +6,7 @@ using System.Threading.Tasks;
|
|||||||
using Kyoo.Models;
|
using Kyoo.Models;
|
||||||
using Kyoo.Models.Exceptions;
|
using Kyoo.Models.Exceptions;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
|
|
||||||
namespace Kyoo.Controllers
|
namespace Kyoo.Controllers
|
||||||
{
|
{
|
||||||
@ -16,17 +17,16 @@ namespace Kyoo.Controllers
|
|||||||
private readonly IPeopleRepository _people;
|
private readonly IPeopleRepository _people;
|
||||||
private readonly IGenreRepository _genres;
|
private readonly IGenreRepository _genres;
|
||||||
private readonly IProviderRepository _providers;
|
private readonly IProviderRepository _providers;
|
||||||
private readonly ISeasonRepository _seasons;
|
private readonly Lazy<ISeasonRepository> _seasons;
|
||||||
private readonly IEpisodeRepository _episodes;
|
private readonly Lazy<IEpisodeRepository> _episodes;
|
||||||
protected override Expression<Func<Show, object>> DefaultSort => x => x.Title;
|
protected override Expression<Func<Show, object>> DefaultSort => x => x.Title;
|
||||||
|
|
||||||
public ShowRepository(DatabaseContext database,
|
public ShowRepository(DatabaseContext database,
|
||||||
IStudioRepository studios,
|
IStudioRepository studios,
|
||||||
IPeopleRepository people,
|
IPeopleRepository people,
|
||||||
IGenreRepository genres,
|
IGenreRepository genres,
|
||||||
IProviderRepository providers,
|
IProviderRepository providers,
|
||||||
ISeasonRepository seasons,
|
IServiceProvider services)
|
||||||
IEpisodeRepository episodes)
|
|
||||||
: base(database)
|
: base(database)
|
||||||
{
|
{
|
||||||
_database = database;
|
_database = database;
|
||||||
@ -34,8 +34,8 @@ namespace Kyoo.Controllers
|
|||||||
_people = people;
|
_people = people;
|
||||||
_genres = genres;
|
_genres = genres;
|
||||||
_providers = providers;
|
_providers = providers;
|
||||||
_seasons = seasons;
|
_seasons = new Lazy<ISeasonRepository>(services.GetRequiredService<ISeasonRepository>);
|
||||||
_episodes = episodes;
|
_episodes = new Lazy<IEpisodeRepository>(services.GetRequiredService<IEpisodeRepository>);
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void Dispose()
|
public override void Dispose()
|
||||||
@ -45,8 +45,10 @@ namespace Kyoo.Controllers
|
|||||||
_people.Dispose();
|
_people.Dispose();
|
||||||
_genres.Dispose();
|
_genres.Dispose();
|
||||||
_providers.Dispose();
|
_providers.Dispose();
|
||||||
_seasons.Dispose();
|
if (_seasons.IsValueCreated)
|
||||||
_episodes.Dispose();
|
_seasons.Value.Dispose();
|
||||||
|
if (_episodes.IsValueCreated)
|
||||||
|
_episodes.Value.Dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
public override async ValueTask DisposeAsync()
|
public override async ValueTask DisposeAsync()
|
||||||
@ -56,8 +58,10 @@ namespace Kyoo.Controllers
|
|||||||
await _people.DisposeAsync();
|
await _people.DisposeAsync();
|
||||||
await _genres.DisposeAsync();
|
await _genres.DisposeAsync();
|
||||||
await _providers.DisposeAsync();
|
await _providers.DisposeAsync();
|
||||||
await _seasons.DisposeAsync();
|
if (_seasons.IsValueCreated)
|
||||||
await _episodes.DisposeAsync();
|
await _seasons.Value.DisposeAsync();
|
||||||
|
if (_episodes.IsValueCreated)
|
||||||
|
await _episodes.Value.DisposeAsync();
|
||||||
}
|
}
|
||||||
|
|
||||||
public override async Task<ICollection<Show>> Search(string query)
|
public override async Task<ICollection<Show>> Search(string query)
|
||||||
@ -168,15 +172,14 @@ namespace Kyoo.Controllers
|
|||||||
if (obj.LibraryLinks != null)
|
if (obj.LibraryLinks != null)
|
||||||
foreach (LibraryLink entry in obj.LibraryLinks)
|
foreach (LibraryLink entry in obj.LibraryLinks)
|
||||||
_database.Entry(entry).State = EntityState.Deleted;
|
_database.Entry(entry).State = EntityState.Deleted;
|
||||||
|
|
||||||
await _database.SaveChangesAsync();
|
|
||||||
|
|
||||||
// TODO fix circular references of Show/Season/Episode Repository.
|
await _database.SaveChangesAsync();
|
||||||
|
|
||||||
if (obj.Seasons != null)
|
if (obj.Seasons != null)
|
||||||
await _seasons.DeleteRange(obj.Seasons);
|
await _seasons.Value.DeleteRange(obj.Seasons);
|
||||||
|
|
||||||
if (obj.Episodes != null)
|
if (obj.Episodes != null)
|
||||||
await _episodes.DeleteRange(obj.Episodes);
|
await _episodes.Value.DeleteRange(obj.Episodes);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -133,16 +133,16 @@ namespace Kyoo
|
|||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
services.AddTransient<ILibraryRepository, LibraryRepository>();
|
services.AddScoped<ILibraryRepository, LibraryRepository>();
|
||||||
services.AddTransient<ICollectionRepository, CollectionRepository>();
|
services.AddScoped<ICollectionRepository, CollectionRepository>();
|
||||||
services.AddTransient<IShowRepository, ShowRepository>();
|
services.AddScoped<IShowRepository, ShowRepository>();
|
||||||
services.AddTransient<ISeasonRepository, SeasonRepository>();
|
services.AddScoped<ISeasonRepository, SeasonRepository>();
|
||||||
services.AddTransient<IEpisodeRepository, EpisodeRepository>();
|
services.AddScoped<IEpisodeRepository, EpisodeRepository>();
|
||||||
services.AddTransient<ITrackRepository, TrackRepository>();
|
services.AddScoped<ITrackRepository, TrackRepository>();
|
||||||
services.AddTransient<IPeopleRepository, PeopleRepository>();
|
services.AddScoped<IPeopleRepository, PeopleRepository>();
|
||||||
services.AddTransient<IStudioRepository, StudioRepository>();
|
services.AddScoped<IStudioRepository, StudioRepository>();
|
||||||
services.AddTransient<IGenreRepository, GenreRepository>();
|
services.AddScoped<IGenreRepository, GenreRepository>();
|
||||||
services.AddTransient<IProviderRepository, ProviderRepository>();
|
services.AddScoped<IProviderRepository, ProviderRepository>();
|
||||||
|
|
||||||
services.AddScoped<ILibraryManager, LibraryManager>();
|
services.AddScoped<ILibraryManager, LibraryManager>();
|
||||||
services.AddSingleton<ITranscoder, Transcoder>();
|
services.AddSingleton<ITranscoder, Transcoder>();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user